Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 替换字符并仅保留其中一个字符_Java_String_Replace - Fatal编程技术网

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

Java 替换字符并仅保留其中一个字符,java,string,replace,Java,String,Replace,有人能帮我吗?我不明白问题出在哪里 我需要检查一个字符串是否有超过1个字符,如“a”,如果是这样,我需要将所有“a”替换为一个空白,但我仍然只需要一个“a” String text = "aaaasomethingsomethingaaaa"; for (char c: text.toCharArray()) { if (c == 'a') { count_A++;//8 if (count_A > 1) {//yes //app

有人能帮我吗?我不明白问题出在哪里

我需要检查一个字符串是否有超过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循环时停止工作。有什么建议吗?多谢各位

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

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

    somethingsomething   a

编辑:

如果确实要删除除最后一个之外的所有
a
,请使用以下命令:

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

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

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

    somethingsomething   a

编辑:

如果确实要删除除最后一个之外的所有
a
,请使用以下命令:

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

你也可以这样做

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", ""));

你也可以这样做

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", ""));

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

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()方法中使用的正则表达式实际上是从中提供的答案中借用的

正则表达式解释:


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

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()方法中使用的正则表达式实际上是从中提供的答案中借用的

正则表达式解释:


text=text.replace(“a”和“)字符串是不可变的。为什么您有一个无止境的
do while
循环?另外,如果您正在循环
while(count_a!=1)
,那么您需要在每次删除字符时减少计数,否则循环永远不会结束。您也不能在使用
for
遍历某个对象时从该对象中删除字符,因为一旦删除了某个字符,就改变了循环(例如,如果字符串中有20个字符,而您删除了一个,那么只剩下19个字符,但迭代器仍然认为有20个字符,并且您从末尾开始运行。在迭代和删除时,您必须从末尾开始,并朝着开头进行操作。如果找到
a
,也可以使用布尔值,而不是int值>a
你想保留吗?
text=text.replace(“a”),字符串是不可变的。为什么你有一个没完没了的
do while
循环?还有,如果你在
while循环(计数a!=1)
,则每次删除字符时都需要减少计数,否则循环永远不会结束。您也不能在使用
for
对某个字符进行迭代时删除该字符,因为一旦删除了某个字符,就改变了循环(例如,如果字符串中有20个字符,而您删除了一个,那么只剩下19个字符,但迭代器仍然认为有20个字符,并且您从末尾开始运行。在迭代和删除时,您必须从末尾开始,并朝着开头进行操作。如果找到
a
,也可以使用布尔值,而不是int值>a
你想保留吗?看起来不错,但我认为它们的意思是一个空字符串,而不是一个空空格。这对我来说很有用!谢谢大家的回答!!上面的其他答案非常有用,因为我没有跳出循环!我会考虑@trunable Wombat的反应,因为毫无疑问它是在未来非常有用!谢谢大家!看起来不错,但我认为他们的意思是一个空字符串,而不是一个空空格。这对我很有用!谢谢大家的回答!!上面的其他答案非常有用,因为我没有跳出循环!我会考虑@trustry Wombat的反应,因为它会解开你的谜团B肯定对未来很有用!谢谢大家!这个答案对我来说就像@tim答案谢谢大家一样有启发性!谢谢反馈这个答案对我来说就像@tim答案谢谢大家一样有启发性!谢谢反馈