首页 > 代码库 > 关于一个困扰一晚上的bug -- java 返回值问题

关于一个困扰一晚上的bug -- java 返回值问题

问题

<span style="font-size:18px;"> tagged=tagData(data, tagger1, tagger2);//tagged是我NER出来的文档。
//内容如The fate of [ORG Lehman Brothers] , Secretary [PER Henry M. Paulson Jr] . 
 //注意上面,逗号和句号前面都有空格,我的目的就是要去掉他。           
OutFile out = new OutFile(outFiles.elementAt(fileId));
out.println(tagged);
out.close();  </span>

解决失败方法1

<span style="font-size:18px;">out.out.toString().replace(",",".");//只是因为找出来String类型的才有replace方法</span>

解决失败方法2

<span style="font-size:18px;">            tagged.replaceAll("\\s*|\t|\r|\n.",".");
            out.println(tagged);
            out.close();  </span>
困扰我一晚上,我就各种正则的套,因为replaceAll前面是正则的形式。

分析:API如下:

replaceAll

public String replaceAll(String regex,
                         String replacement)
使用给定的 replacement 替换此字符串所有匹配给定的正则表达式的子字符串。

调用此方法的 str.replaceAll(regex, repl) 形式与以下表达式产生的结果完全相同:

Pattern.compile(regex).matcher(str).replaceAll(repl)

注意,在替代字符串中使用反斜杠 (\) 和美元符号 ($) 与将其视为字面值替代字符串所得的结果可能不同;请参阅 Matcher.replaceAll。如有需要,可使用 Matcher.quoteReplacement(java.lang.String) 取消这些字符的特殊含义。


参数:
regex - 用来匹配此字符串的正则表达式
replacement - 用来替换每个匹配项的字符串
返回:
所得 String
问题:我尼玛没有返回改变的string!!导致最后输出文本中tagged一直是不变的!!!


正确解决

<span style="font-size:18px;">           String str=tagged.replaceAll("\\s,",",");
            String str2=str.replaceAll("\\s\\u002E",".");
            //tagged.replaceAll("\\s*|\t|\r|\n.",".");
            
            
            out.println(str2);
            out.close();   </span>
深藏功与名。