2017-10-09 3 views
1

私はこの配列のtokenArrayという名前のStringを持っています。その内容は以下のJavaでRegexを使って配列から文字列リテラルを識別する方法は?


[NUM1] [;] [。] [?] [ "] [これ] [あり] [A] [\"] [文字列] [リテラル] [\ "] ["]


注:エスケープされていないエスケープされた二重引用符はそのままです。

質問:

私は単一の文字列リテラル?,として配列内の2つの二重引用符の間の値という方法を特定します。私は文字列連結を使用して一時的なレクエムを見つけ出し、最終的にはそれが見つかるとスタックに保存します。私の場合は、//とtHiS_iS_tHe_EnD_Of_NeWlInEの開始と終了の一致の前に、一行のコメントを特定することになりました。上のように2つの二重引用符を使ってregexをどのように適用すればよいのですか? TIA。

背景:

それは私が探していたサンプルは、単一のString宣言の形であると私は配列にしただけのことです。私はそれが文字列の配列でどのように動作するかをかなり理解できません。

BTW。私はコードのブロックをスキャンし、特定の言語の語彙を出力する文字列アナライザを作っています。私はすでに、区切り文字と正規表現を持たない言語のいくつかのキーワードに加えて、単語やブロックコメントのような各語彙素を特定しました。しかし、私はまだ検出されていない文字列リテラルに対して正規表現を試してみたい。 ifとelseステートメントによる検出の適用は時間がかかり、混乱していましたが、私はそれを最小限にとどめました。

以下は、私の配列内の1行のコメントを識別するために使用しているコードです。 forループは、私の配列を読み込んで、新たに検出された語彙素をスタックに割り当てるためのループ全体です。上記のコードで

for(int ctr=0;ctr<removedNullsStackSize.length;ctr++) { 
     if(removedNullsStackSize[ctr].equals("//")) { 
      do { 
       tempString = tempString + " " + removedNullsStackSize[ctr] ; 
       ctr++;     
       if(ctr>=removedNullsStackSize.length-1){ 
        removedNullsStackSize[ctr]="tHiS_iS_tHe_EnD_Of_NeWlInE"; 
       } 
      } 
      while(removedNullsStackSize[ctr]!="tHiS_iS_tHe_EnD_Of_NeWlInE"); 
       myQCommentsTokenized.add(tempString); 
       tempString=""; 
     } 

、何それがないことが//検出され、それは改行文字を検出するまでない連結止まらない場合、それは前の配列を連結することです。改行文字が検出された場合は、新しい語彙素が見つかるたびに、その文字列をスタックに保存します。

+0

この配列のソースは何ですか? JSONまたは一般的に使用される別の形式である可能性はありますか? –

+0

あなたの配列定義では... {"int"、 "num1"、 ";"、 "" "" This "、...、二重引用符がエスケープされない理由はありますか? {"int"、 "num1"、 ";"、 "" \ "、" This "、...? – Spangen

+1

入力がトークン化される前に、これをレクサーで既に実行するのが理想的です。今のところ、単語の間に何個の空白や改行があるのか​​分かりません。 – Henry

答えて

0

マイパターンです。

//Regex for identifying string literals 
     Pattern strRegex=Pattern.compile("\".*\""); 

//Loop your array here to read code 

//str is the temporary location of all the codes you have 
//In mine, I have it inside a text area so I just typecasted it to string and start comparing there 
//begins matching` for string literals that is in the strRegex 
     Matcher m = strRegex.matcher(str) ; 

コードを読み取った後、読み込まれたコードに文字列リテラルの語彙があります。

while (m.find()) { 
    String forReadStr=m.group(); 
    //If the end of the token is a double quote, Do this 
    //in this loop, you can then declare anything for the lexeme you detected and do anything with it 
      if(forReadStr.endsWith("\"")){    
       System.out.println(m.group()+"\n\t -> \t This is a String Literal\n"); 
      } 
} 
関連する問題