[英]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.