String.replaceAll用于多个字符

时间:2012-02-02 14:36:35

标签: java

我有一行^||^作为我的分隔符,我正在使用

int charCount = line.replaceAll("[^" + fileSeperator + "]", "").length();  
if(fileSeperator.length()>1)
{  
    charCount=charCount/fileSeperator.length();
    System.out.println(charCount+"char count between");  
}

如果我有一个有迷路|^的行,这也行不通。我如何修改正则表达式或任何其他建议?

5 个答案:

答案 0 :(得分:3)

如果我理解正确,你真正要做的就是计算^||^出现在你的字符串中的次数。

如果是这种情况,您可以使用:

Matcher m = Pattern.compile(Pattern.quote("^||^")).matcher(line);
int count = 0;
while ( m.find() ) 
    count++;

System.out.println(count + "char count between");

但你真的不需要正则表达式引擎。

int startIndex = 0;
int count = 0;
while ( true ) {
    int newIndex = line.indexOf(fileDelimiter, startIndex);
    if ( newIndex == -1 ) {
        break;
    } else {
        startIndex = newIndex + 1;
        count++;
    }
}

答案 1 :(得分:2)

某些字符在正则表达式中具有特殊含义,例如^|。必须使用反斜杠对它们进行转义,以便将它们视为普通字符而不是特殊字符。例如,以下正则表达式匹配所有插入符号(^)和竖线(|)字符(请注意反斜杠):[\^\|]

Pattern.quote()方法可用于转义给定String中的所有特殊字符。

String quoted = Pattern.quote("^||^"); //returns "\^\|\|\^";

另请注意,字符类仅匹配一个字符。因此,正则表达式[^\^\|\|\^]将匹配除^|之外的所有字符,除序列^||^之外的所有字符。如果您的目的是计算String中的分隔符数(^||^),那么更好的方法可能是使用String.indexOf(String, int)方法。

答案 2 :(得分:1)

马克彼得斯的回答似乎更好。我编辑了所以我的回答不会引起任何混淆。

答案 3 :(得分:0)

你应该用正确的转义替换它,因为你的分隔符具有正则表达式的所有特殊字符:

line.replaceAll("\\^\\|\\|\\^", "");

或者根本不使用正则表达式并像这样调用replace方法:

line.replace("^||^", "");

答案 4 :(得分:0)

懒惰的解决方案。

取决于最终目标(println语句有点令人困惑):

int numberOfDelimiters = (line.length() - line.replace(fileSeparator,"").length()) 
                         / fileSeparator.length();

int numberOfNonDelimiterChars = line.replace(fileSeparator,"").length();