Java中的字符串替换

我目前有一个包含字符A,B和C的字符串,例如字符串

"A some other random stuff BC" 

其他随机的东西不包含A,B或CI想分别用’A’,’B’和’C’代替A,B和C,目前我正在做的最好的方法是:

 String.replace("A", "'A'").replace("B", "'B'").replace("C", "'C'") 

如果A,B和C是那些确切的单个字符,则cletus的答案可以正常工作,但如果它们可以是更长的字符串则不会,例如,你只是将它们称为A,B和C. 如果他们是更长的字符串,您需要做:

 String input = "FOO some other random stuff BAR BAZ"; String output = input.replaceAll("FOO|BAR|BAZ", "'$0'"); 

您还需要转义FOO,BAR和BAZ中的任何特殊字符,以便它们不会被解释为特殊的正则表达式符号。

使用正则表达式:

 String input = "A some other random stuff BC"; String output = input.replaceAll("[ABC]", "'$0'"); 

输出:

 'A' some other random stuff 'B' 'C' 

看看Apache Commons Lang的StringUtils及其各种replace方法。

我认为如果那些是相当复杂的字符串,正则表达式并不合适。

考虑将它包装在您自己的实用程序方法中,将数组或列表作为参数。

 public static String replace(String string, String[] toFind, String[] toReplace) { if (toFind.length != toReplace.length) { throw new IllegalArgumentException("Arrays must be of the same length."); } for (int i = 0; i < toFind.length; i++) { string = string.replace(toFind[i], toReplace[i]); } return string; } 

也许Apache Commons或Google Code中已有一个。 如果您更喜欢第三方API以上的本土产品,请看一下。

编辑 :为什么downvoting技术上正确,但在您看来不是首选答案? 只是不要upvote。

其他人的答案更好,但在您尝试学习的假设下,我想指出原始代码的问题。

这将是你正在尝试做的“固定”版本(使用你的风格,这很接近)以及你需要做的事情来使它工作:

 public String quoteLetters(String s) { return s.replace("A", "'A'").replace("B", "'B'").replace("C", "'C'"); } 

以下是您遇到的问题:

  • Replace是一个方法,而不是静态函数,所以你必须在String的实例上调用它,而不是String本身。
  • Replace返回新字符串的实例,它不能修改原始字符串。 在我的代码中,我正在“返回”新字符串,s仍未修改。
  • 如果这是作业,你应该标记它。
  • 不要像我一样链接它们 – 其他答案更好,因为我的实际上会创建3个新字符串然后立即销毁它们。