我有一行^||^
作为我的分隔符,我正在使用
int charCount = line.replaceAll("[^" + fileSeperator + "]", "").length();
if(fileSeperator.length()>1)
{
charCount=charCount/fileSeperator.length();
System.out.println(charCount+"char count between");
}
如果我有一个有迷路|
或^
的行,这也行不通。我如何修改正则表达式或任何其他建议?
答案 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();