我现在把一个java文件转成一个string,除去comment.
现在要把不是关键词的if换成2个空格,也就是"  ",我有个方法判断if是不是关键词,但是怎么换呢?
比如一个String str = "string a = \"if \"; if (a == b)"; 换成 "string a = \"  \"; if (a==b)"
谢谢大家。

解决方案 »

  1.   

    有点难度,你得区分字符串中的,注释中的。光注释就有好多情况,比如:if(a == b) // if(a == b)if(a == b) /* if(a == b) */// if(a == b)
    if(a == b)/**
     * if(a == b)
     */
    if(a == b)/**
       if(a == b)
     */
    if(a == b)更变态一点的if(a == b) /* 
    if(a == b)
     */
      

  2.   

    .......
    replace
    replaceall
    substring
    split
    結合起來用。
    說實在的
    我認為你手動比較快。。
      

  3.   

    没有编译器,下面的应该可行的
    str = str.replaceAll("([^\"]*?)if(?=[^\"]*\"\s*[;+])", "$1  ");JavaScript 的测试过的
    <script>
    var a = "string a = \"if afda if adsf\"; if (a == b); string a = \"adsf if a if adsf\";";
    var r = /([^"]*?)if(?=[^"]*"\s*[;+])/g;
    alert(a.replace(r, "$1  ") + "\n" + a);
    </script>这种只能处理
    String str = "string a = \"if afda if adsf\"; if (a == b); string a = \"adsf if a if adsf\";";
    这种样子的如果是
    String str = "string a = \"if afda \\\"if\\\" adsf\"; if (a == b);";这种形式的就比较讨厌了,再想想看哈~
      

  4.   

    jyf7356759 已经能够判断if是不是关键词了。
    接下来就好办了
    String str = "string a = \"if \"; if (a == b)"; 
    StringBuffer StrBuf=new StringBuffer(str);
    int startIndex;//非关键字if的开始索引
    while()//循环条件你自己加上
    {
    //你的方法:判断if是不是关键词,这里你的得到了非关键字if的开始索引StrBuf.replace(startIndex,startIndex+2,"  ");
    }
      

  5.   

    不过while的循环条件不容易判断啊...
    大家有没有好的办法呢
      

  6.   

    再顶下,其实input的就是一个java文件,我想把不是关键字的if全部替换掉.