input的就是一个java文件,我想把不是关键字的if全部替换掉.
目前我把input文件转换成了一个不包含comments和转行符的String。但是有些if不是关键字,比如在String里,怎么把这些找出来,换成"  "呢?
我的方法判断是不是关键字,用看这个if前的"个数是基数还是偶数,但是还是不能写个方法替换掉所有不是关键字的if
有朋友帮我想想算法么?

解决方案 »

  1.   

    那比如有个变量为:
    int adifc = 10;这样的if要不要替换掉啊。1、我觉得针对字符串里的if, 可以先检索全文,把" "里的内容都提取出来,然后replace就好了。(不管是提取还是replace都是挺方便的,这里就不罗嗦了)2、如果像上面说的,adifc里的if也要替换就比较有难度了,首先可以肯定,关键字if后面一定有一对括号(), 且关键字if前面一定有至少一个空格或者tab等分隔字符,满足这个条件的if应该就是关键字了,这样就好判断哪些是关键字,不能替换,哪些不是关键字,可以替换了。
      

  2.   


    正则表达式应该用得上,首先把文件分成一句一句的代码,对每句含有if的代码处理:关键字if肯定满足一定的规则,用正则表达式去匹配它,如果当前语句含有if又不被正则表达式匹配,说明他包含的if不是关键字。仅供参考。
      

  3.   

    你的那个我试了下,不知道为什么显示错误,其实我觉得1楼的方法不错,我只要把""里面的东西全换成空格就可以了。
    然后判断的时候,判断" if "就会避免 String sifs这类问题。
    是这样的吧?
      

  4.   

    那我用str = str.replaceAll("[\"](.*)[\"]", " "); 就应该可以了吧?
      

  5.   

    那个可能是有问题的,还不全面,重新改写了一个,可以支持字符串中有 \" 的。public class Test {
        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);
        }
    }