Java中的字符串替换

时间:2009-12-23 00:03:01

标签: java regex string

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

"A some other random stuff B C"

其他随机内容不包含A,B或C我想替换A,B和C C分别带有'A','B'和'C',这是目前我正在做的最好的方法:

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

5 个答案:

答案 0 :(得分:16)

如果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中的任何特殊字符,以便它们不会被解释为特殊的正则表达式符号。

答案 1 :(得分:10)

使用正则表达式:

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

输出:

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

答案 2 :(得分:3)

从Apache Commons Lang及其各种replace方法中查看StringUtils

答案 3 :(得分:2)

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

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

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以上的本土产品,请试一试。

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

答案 4 :(得分:1)

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

这是你要做的事情的“固定”版本(使用你的风格,这很接近)以及你需要做的事情才能让它发挥作用:

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

以下是您遇到的问题:

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