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个新字符串然后立即销毁它们。