.javaファイルの条件をすべて調べる方法を試しました。 "if"はすべてカウントする必要がありますが、コメント付きで囲まれているか、文字列として処理されているものではありません。 私はStringTokenizerでこの問題を解決しようとしましたが、 "//"記号と文字列の後ろにどのように行が隠れているのかわかりません。このようにこの問題を実現することは可能でしょうか?.javaファイル内の条件を調べる
public int getIfCount()
{
int counter = 0;
String t = "";
try
{
FileReader file = new FileReader(path);
StringBuffer sb = new StringBuffer();
int tmp;
while ((tmp = file.read()) != -1)
{
sb.append((char)tmp);
}
t = sb.toString();
StringTokenizer stk = new StringTokenizer(t);
String token;
while (stk.hasMoreTokens())
{
token = stk.nextToken();
if (token.contains("/*"))
{
while (stk.hasMoreTokens())
{
if (stk.nextToken().contains("*/"))
break;
}
}
else if (token.contains("//"))
{
while (stk.hasMoreTokens() && stk.nextToken() != "\n")
{
if (stk.nextToken().endsWith("\n"))
break;
}
}
else if (token.contains("\""))
{
if (!token.endsWith("\""))
while (stk.hasMoreTokens())
{
if(stk.nextToken().contains("\""))
break;
}
}
else if (token.startsWith("if"))
counter++;
}
}
catch (FileNotFoundException e)
{
System.out.println("This file does not exist!");
}
catch (IOException e)
{
System.out.println("ERROR");
}
return counter;
}
あなたが質問した質問に答えるには、はい、可能です。コンパイラはどのように動作しますか? –
StringBufferは10年以上前に廃止されたので、StringBuilderを使用することをお勧めします。 'iffy'トークンを持つかもしれないので、' startsWith'を使わないでください。コードが期待したことをしていない場合は、デバッガのコードをステップ実行することをお勧めします。注:あなたはコメントにコードをつけることができます –
すべての国境をカバーするには、完全なJava字句解析を行い、キーワード「if」がどれくらい出現したかをカウントする必要があります。 (あなたが言及したケースとは別の境界ケースはユニコードのエスケープです。\ u0069fはまた "if"です)。 – Henry