如何替换字符串中第n个字符的发生?

问题描述:

我需要替换第五个之后的所有逗号。所以如果一个String包含10个commans,我只想留下前5个,并且删除所有随后的逗号。如何替换字符串中第n个字符的发生?

我该怎么做?

String sentence = "Test,test,test,test,test,test,test,test"; 
String newSentence = sentence.replaceAll(",[6]",""); 

刚刚从一开始就高达5日逗号捕获所有的字符,并且匹配使用交替操作|所有剩余的逗号。所以,|应该匹配所有剩余的逗号。用$1替换所有匹配的字符将会给你想要的输出。

sentence.replaceAll("^((?:[^,]*,){5})|,", "$1"); 

DEMO

+1

这工作,但正则表达式是真的不适合工作的工具在这里。它们是通常只有原作者才能理解的缓慢,难看的代码,并且很容易让它们稍微错误。 – cderwin

+1

作为魅力!不知道为什么和如何,但它完成了工作,谢谢 – Emily

+0

@cderwin如果它很丑,那么为什么所有的语言都添加它.. –

如果你想知道如何不使用正则表达式解决这个问题...有图书馆,可以使您的生活更轻松,但这里是浮现在脑海的第一个念头。

public String replaceSpecificCharAfter(String input, char find, int deleteAfter){ 

    char[] inputArray = input.toCharArray(); 
    String output = ""; 
    int count = 0; 

    for(int i=0; i <inputArray.length; i++){ 
     char letter = inputArray[i]; 
     if(letter == find){ 
      count++; 
      if (count <= deleteAfter){ 
       output += letter; 
      } 
     } 
     else{ 
      output += letter; 
     } 
    } 

    return output; 
} 

,那么你会调用该函数,像这样:

String sentence = "Test,test,test,test,test,test,test,test"; 
String newSentence = replaceSpecificCharAfter(sentence, ',', 6);