繁体   English   中英

String.replaceAll用于多个字符

[英]String.replaceAll for multiple characters

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

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

如果我的行有杂散,这将不起作用| ^因为它们也算在内。 如何修改正则表达式或任何其他建议?

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

如果是这样,您可以使用:

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++;
    }
}

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

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

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

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

马克·彼得斯的答案似乎更好。 我进行了编辑,因此我的答案不会造成任何混乱。

由于分隔符具有正则表达式的所有特殊字符,因此应使用适当的转义符将其替换为:

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

否则根本不使用正则表达式,并调用如下的replace方法:

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

懒惰的解决方案。

根据最终目标(println语句有点混乱):

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM