input的就是一个java文件,我想把不是关键字的if全部替换掉.
目前我把input文件转换成了一个不包含comments和转行符的String。但是有些if不是关键字,比如在String里,怎么把这些找出来,换成" "呢?
我的方法判断是不是关键字,用看这个if前的"个数是基数还是偶数,但是还是不能写个方法替换掉所有不是关键字的if
有朋友帮我想想算法么?
目前我把input文件转换成了一个不包含comments和转行符的String。但是有些if不是关键字,比如在String里,怎么把这些找出来,换成" "呢?
我的方法判断是不是关键字,用看这个if前的"个数是基数还是偶数,但是还是不能写个方法替换掉所有不是关键字的if
有朋友帮我想想算法么?
int adifc = 10;这样的if要不要替换掉啊。1、我觉得针对字符串里的if, 可以先检索全文,把" "里的内容都提取出来,然后replace就好了。(不管是提取还是replace都是挺方便的,这里就不罗嗦了)2、如果像上面说的,adifc里的if也要替换就比较有难度了,首先可以肯定,关键字if后面一定有一对括号(), 且关键字if前面一定有至少一个空格或者tab等分隔字符,满足这个条件的if应该就是关键字了,这样就好判断哪些是关键字,不能替换,哪些不是关键字,可以替换了。
正则表达式应该用得上,首先把文件分成一句一句的代码,对每句含有if的代码处理:关键字if肯定满足一定的规则,用正则表达式去匹配它,如果当前语句含有if又不被正则表达式匹配,说明他包含的if不是关键字。仅供参考。
然后判断的时候,判断" if "就会避免 String sifs这类问题。
是这样的吧?
public static void main(String[] args) {
String str = "String str = \"a if as if df \\\"if\\\" asdf\" +\n" +
" \"adfadf \\\"if a if\\\" adfa if iffish if \";\n" +
"if (a == b) {\n" +
" a = 2;\n" +
"} else if (a == c) {\n" +
" a = 3;\n" +
"} else {\n" +
" a = 4;\n" +
"}\n" +
"String str1 = \"a if as \\\"a if a if\\\" af if asdf\";";
System.out.println(str + "\n");
// 这个去除字符串中不是在单词中的 if(单词中的 if 不去除)
String regex = "(?<=\"[^\"]{0,200})\\bif\\b(?=(?:\\\\\"|[^\"])*\"\\s*[;+])";
// 这个去除字符串中所有的 if(包括单词中的 if)
// String regex = "(?<=\"[^\"]{0,200})if(?=(?:\\\\\"|[^\"])*\"\\s*[;+])";
str = str.replaceAll(regex, " ");
System.out.println(str);
}
}