重开一贴继续求教,如何替换掉不是关键字的if

jyf7356759 2008-04-12 06:34:10
input的就是一个java文件,我想把不是关键字的if全部替换掉.
目前我把input文件转换成了一个不包含comments和转行符的String。但是有些if不是关键字,比如在String里,怎么把这些找出来,换成" "呢?
我的方法判断是不是关键字,用看这个if前的"个数是基数还是偶数,但是还是不能写个方法替换掉所有不是关键字的if
有朋友帮我想想算法么?
...全文
105 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
jyf7356759 2008-04-13
  • 打赏
  • 举报
回复
谢谢了!
  • 打赏
  • 举报
回复
那个可能是有问题的,还不全面,重新改写了一个,可以支持字符串中有 \" 的。

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);
}
}
yeshuangming 2008-04-12
  • 打赏
  • 举报
回复

正则表达式应该用得上,首先把文件分成一句一句的代码,对每句含有if的代码处理:

关键字if肯定满足一定的规则,用正则表达式去匹配它,如果当前语句含有if又不被正则表达式匹配,说明他包含的if不是关键字。

仅供参考。
shadowlin 2008-04-12
  • 打赏
  • 举报
回复
用正则表达式吧..不过为什么要把变量名里的if都去掉呢?
jyf7356759 2008-04-12
  • 打赏
  • 举报
回复
恩,你的第一点说的很好啊...哎,老了,不中用了,脑子不行了。
jyf7356759 2008-04-12
  • 打赏
  • 举报
回复
恩,对哦,这样的if也要去掉才好....
怎么办呢...
  • 打赏
  • 举报
回复
那比如有个变量为:
int adifc = 10;

这样的if要不要替换掉啊。

1、我觉得针对字符串里的if, 可以先检索全文,把" "里的内容都提取出来,然后replace就好了。(不管是提取还是replace都是挺方便的,这里就不罗嗦了)

2、如果像上面说的,adifc里的if也要替换就比较有难度了,首先可以肯定,关键字if后面一定有一对括号(), 且关键字if前面一定有至少一个空格或者tab等分隔字符,满足这个条件的if应该就是关键字了,这样就好判断哪些是关键字,不能替换,哪些不是关键字,可以替换了。
jyf7356759 2008-04-12
  • 打赏
  • 举报
回复
那我用str = str.replaceAll("[\"](.*)[\"]", " "); 就应该可以了吧?
jyf7356759 2008-04-12
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 bao110908 的回复:]
我在另一个帖里,写了个正则,如果不是特别复杂的(嵌套引号的那种)是可以用的啊。
[/Quote]
你的那个我试了下,不知道为什么显示错误,其实我觉得1楼的方法不错,我只要把""里面的东西全换成空格就可以了。
然后判断的时候,判断" if "就会避免 String sifs这类问题。
是这样的吧?
nihuajie05 2008-04-12
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 bao110908 的回复:]
我在另一个帖里,写了个正则,如果不是特别复杂的(嵌套引号的那种)是可以用的啊。
[/Quote]
注释方式这么多...我我我...还是继续想想吧...吃完晚饭再说...刚起床
  • 打赏
  • 举报
回复
我在另一个帖里,写了个正则,如果不是特别复杂的(嵌套引号的那种)是可以用的啊。

62,623

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧