如何用Java替换特定的字符串?

时间:2016-07-17 17:14:25

标签: java string replace

我通常不会求助,但在这里我真的需要帮助 我有以下代码示例:

String text = "aa aab aa aab";
text = text.replace("aa", "--");
System.out.println(text);

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

我有一个问题,我如何只替换 aab 包含的 aab 部分。
所以控制台输出是:

-- aab -- aab

我有另一个例子:

String text = "111111111 1";
text = text.replace("1", "-");
System.out.println(text);

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

我只想替换一个角色,而不是所有被放在一起的角色 所以控制台输出是:

111111111 -

是否有针对此类情况的Java快捷方式?我无法弄明白,如何只替换字符串的特定部分。
任何帮助将不胜感激:)

3 个答案:

答案 0 :(得分: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 -

答案 1 :(得分:0)

您可以使用正则表达式

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

说明:

  • String.replaceAllString.replace相反的是一个正则表达式,需要更换
  • (?=reg)正则表达式的右边部分必须跟一个与正则表达式reg匹配的字符串,但只捕获正确的部分
  • [^1]*表示从0到任意数量不同于'1'
  • 的字符的序列
  • $表示已到达字符串的结尾

简单来说,这意味着:请用空字符串替换所有'1'字符后跟任意数量的不同于'1'的字符,直到字符串结尾< / em>的

答案 2 :(得分:0)

我们可以使用Java中的StringTokenizer来实现任何类型输入的解决方案。以下是示例解决方案,

public class 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);
}