如何在Java中替换字符串中的字符?

2022-08-31 12:56:20

使用Java,我想遍历文本的行,并将所有&符号()替换为XML实体引用。&&

我扫描文本的行,然后使用 Scanner 类扫描文本中的每个单词。然后,我使用 来迭代单词的每个字符。但是,如何替换角色?首先,字符串是不可变的对象。其次,我想用几个字符()替换一个字符()。我应该如何解决这个问题?CharacterIterator&amp&;

CharacterIterator it = new StringCharacterIterator(token);
for(char ch = it.first(); ch != CharacterIterator.DONE; ch = it.next()) {
       if(ch == '&') {

       }
}

答案 1

尝试使用 或 代替。String.replace()String.replaceAll()

String my_new_str = my_str.replace("&", "&");

(两者都替换所有匹配项; 允许使用正则表达式。replaceAll


答案 2

简单的答案是:

token = token.replace("&", "&");

尽管名称与 replaceAll 相比,replace 确实做了一个 replaceAll,它只是没有使用正则表达式,这似乎在这里是有序的(从性能和良好实践的角度来看 - 不要偶然使用正则表达式,因为它们有特殊的字符要求,你不会注意)。

Sean Bright的答案可能和值得从性能角度考虑的一样好,没有对性能和性能测试的进一步目标要求,如果你已经知道这个代码是性能的热点,如果这是你的问题来自哪里。它当然不值得投反对票。只需使用StringBuilder而不是StringBuffer,除非您需要同步。

话虽如此,这里还有一个更深层次的潜在问题。转义字符是一个已知的问题,许多库都解决了这个问题。您可能需要考虑将数据包装在 XML 的 CDATA 部分中,或者您可能更愿意使用 XML 库(包括现在 JDK 附带的库)来实际生成 XML(以便它将处理编码)。

Apache还有一个转义库,作为Commons Lang的一部分。