替换字符并仅保留其中一个字符

时间:2018-04-06 00:41:08

标签: java string replace

有人可以帮助我吗?我不明白问题出在哪里......

我需要检查一个String是否有超过1个字符如'a',如果是这样我需要将所有'a'替换为空格,但我仍然只想要一个'a'。

String text = "aaaasomethingsomethingaaaa";

    for(char c: text.toCharArray()){

        if(c=='a'){
            count_A++;//8
            if(count_A>1) {//yes
            //app crash at this point
                do {
                    text.replace("a", "");
                } while (count_A != 1);
            }
        }
    }

应用程序在进入while循环时停止工作。有什么建议吗?非常感谢你!

3 个答案:

答案 0 :(得分:2)

如果要替换除最后一个字符串之外的字符串中的每个a,那么您可以尝试以下正则表达式选项:

String text = "aaaasomethingsomethingaaaa";
text = text.replaceAll("a(?=.*a)", " ");

    somethingsomething   a

Demo

修改

如果你真的想删除每个a除了最后一个,那么请使用:

String text = "aaaasomethingsomethingaaaa";
text = text.replaceAll("a(?=.*a)", "");

答案 1 :(得分:1)

你也可以这样做

String str = new String ("asomethingsomethingaaaa");
int firstIndex = str.indexOf("a");
firstIndex++;
String firstPart = str.substring(0,  firstIndex);
String secondPart = str.substring(firstIndex);
System.out.println(firstPart + secondPart.replace("a", ""));

答案 2 :(得分:0)

也许我错了,但我觉得你在谈论字符串中任何单个字符的运行。如果是这种情况,那么你可以使用这样的小方法:

public String removeCharacterRuns(String inputString) {
    return inputString.replaceAll("([a-zA-Z])\\1{2,}", "$1");
}

使用此方法:

String text = "aaaasomethingsomethingaaaa";
System.out.println(removeCharacterRuns(text));

控制台输出是:

asomethingsomethinga

或者甚至可能:

String text = "FFFFFFFourrrrrrrrrrrty TTTTTwwwwwwooo --> is the answer to: "
            + "The Meeeeeaniiiing of liiiiife, The UUUniveeeerse and "
            + "Evvvvverything.";
System.out.println(removeCharacterRuns(text));

控制台输出是........

Fourty Two --> is the answer to: The Meaning of life, The Universe and Everything.

在提供的 removeCharacterRuns()方法中使用的正则表达式实际上是从this SO Post中提供的答案中借用的。

正则表达式说明:

enter image description here