Java 替换字符并仅保留其中一个字符
有人能帮我吗?我不明白问题出在哪里 我需要检查一个字符串是否有超过1个字符,如“a”,如果是这样,我需要将所有“a”替换为一个空白,但我仍然只需要一个“a”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
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答案谢谢大家一样有启发性!谢谢反馈