如何在Java中替换特定字符串?

3
我通常不会寻求帮助,但在这里我真的需要它。
我有以下代码示例:
String text = "aa aab aa aab";
text = text.replace("aa", "--");
System.out.println(text);

Console output: -- --b -- --b

我有一个问题,如何只替换字符串中的aa部分,而不包括aab
因此控制台输出为:
-- aab -- aab

我有另一个例子:
String text = "111111111 1";
text = text.replace("1", "-");
System.out.println(text);

Console output: --------- -

我只想替换单个字符,而不是所有放在一起的相同字符。
所以控制台输出为:

111111111 -

在这种情况下,有没有Java的快捷方式?我无法弄清楚如何仅替换字符串的特定部分。
任何帮助都将不胜感激 :)

3个回答

1
您可以使用String.replaceAll(String, String)和一个正则表达式。通过使用单词边界(\b),可以实现以下类似的内容:
String[] texts = { "aa aab aa aab", "111111111 1" };
String[] toReplace = { "aa", "1" };
String[] toReplaceWith = { "--", "-" };
for (int i = 0; i < texts.length; i++) {
    String text = texts[i];
    text = text.replaceAll("\\b" + toReplace[i] + "\\b", toReplaceWith[i]);
    System.out.println(text);
}

输出(按要求)

-- aab -- aab
111111111 -

0

你可以使用正则表达式

String text = "111111111 1";
text = text.replaceAll("1(?=[^1]*$)", "");
System.out.println(text);

解释:

  • String.replaceAll 方法接受一个正则表达式作为参数,而 String.replace 方法接受一个字面量字符串作为参数。
  • (?=reg) 正则表达式的右侧必须跟随一个与正则表达式 reg 匹配的字符串,但只有右侧部分会被捕获。
  • [^1]* 表示一个由 0 到任意个非 '1' 字符组成的序列。
  • $ 表示已到达字符串的结尾。

简单来说,这意味着:请用空字符串替换所有以字符 '1' 开头,后面跟随任意数量的非 '1' 字符直到字符串结尾的部分。


看了其他答案,我可能误解了问题。记录一下。 - Dici

0
我们可以使用Java中的StringTokenizer来实现任何类型输入的解决方案。以下是示例解决方案,
公共类StringTokenizerExample {
/**
 * @param args
 */
public static void main(String[] args) {
    String input = "aa aab aa aab";
    String output = "";
    String replaceWord = "aa";
    String replaceWith = "--";
    StringTokenizer st = new StringTokenizer(input," ");
    System.out.println("Before Replace: "+input);
    while (st.hasMoreElements()) {
        String word = st.nextElement().toString();
        if(word.equals(replaceWord)){
            word = replaceWith;
            if(st.hasMoreElements()){
                word = " "+word+" ";
            }else{
                word = " "+word;
            }
        }
        output = output+word;
    }
    System.out.println("After Replace: "+output);
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接