我试图使用.java文件中的条件来查找所有条件(我假定该文件只包含正确的指令)。 它应该计算所有的“如果”,但不包括那些与评论或锯齿串作为字符串的内容。 我试图用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;
}
要回答你问的问题,是的,这是可能的。编译器如何工作? –
我建议你使用StringBuilder,因为StringBuffer已经在十多年前被弃用了。不要使用'startsWith',因为你可能有一个'iffy'令牌。如果代码没有达到您的期望值,我建议您逐步调试您的调试器中的代码。注意:您可以在注释中添加代码 –
要涵盖所有边界案例,您需要完整进行Java词法分析,然后计算关键字“if”的出现频率。 (除了你提到的情况外,一个边界情况是unicode转义,'\ u0069f'也是一个“if”)。 – Henry