Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.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 如何替换字符串中出现的第n个字符?_Java_Regex - Fatal编程技术网

Java 如何替换字符串中出现的第n个字符?

Java 如何替换字符串中出现的第n个字符?,java,regex,Java,Regex,我需要替换第五个逗号之后的所有逗号。因此,如果一个字符串包含10个逗号,我只想保留前5个,并删除所有后续的逗号 我该怎么做 String sentence = "Test,test,test,test,test,test,test,test"; String newSentence = sentence.replaceAll(",[6]",""); 只需捕获从开始到第5个逗号的所有字符,并使用交替运算符|匹配所有剩余的逗号即可。所以,之后的|应该匹配所有剩余的逗号。通过将所有匹配的字符替换

我需要替换第五个逗号之后的所有逗号。因此,如果一个字符串包含10个逗号,我只想保留前5个,并删除所有后续的逗号

我该怎么做

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

只需捕获从开始到第5个逗号的所有字符,并使用交替运算符
|
匹配所有剩余的逗号即可。所以
之后的
|
应该匹配所有剩余的逗号。通过将所有匹配的字符替换为
$1
将为您提供所需的输出

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

如果您想知道如何在不使用正则表达式的情况下解决此问题。。。有一些图书馆可以让你的生活更轻松,但我首先想到的是

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