2012-02-02 9 views
1

私は私はそれは同様にこれらを数えるよう|または^を逸脱したラインを持っている場合、これは動作しませんString.replaceAll

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

を使用しています、私の区切り文字として^||^とのラインを持っています。正規表現やその他の提案をどのように修正できますか?

+2

あなたのラインの例をここに表示できますか? – anubhava

+0

'fileSeperator'は何ですか? – Nishant

+0

^||^0^||^27111500^||^GS-21F-0196X^||^7^||^0^||^F^|| ^アイテム:アイスハード|ソフト|一時| 3^4 | under | hello^||^ – justin3250

答えて

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

多かれ少なかれ。これはまさに私が望んでいたものです。 Thanx a ton – justin3250

+0

ただ疑問。これは、単一の|または単一の^文字の右側 – justin3250

+0

hi mark答えの2番目の部分は必要な出力と一致しますが、1番目の答えは一致しません。それは私に0のカウントを与える一方、| \\ – justin3250

1

マークピーターズの答えは良いようです。私は私の答えが混乱を起こさないように編集しました。

+0

これは^と|を置き換えます。別々に、完全なセパレータ文字列を特定しないでください。 –

+0

はい、それはちょうどサンプルだった..彼は彼のセパレータで置き換えることができます。 – tartak

+0

その場合、複数の置換が必要なのはなぜですか? –

0

あなたの区切り文字は、正規表現のすべての特殊文字があるので、あなたは適切なエスケープでこのようにそれを交換する必要があります。

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

か、他すべてで正規表現を使用して、このような方法を置き換える呼び出すことはありませんが:

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

レイジー溶液。最終的な目標に応じて、

は、(printlnの文は少し混乱して):

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

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

特定の文字は、そのような^|などの正規表現で特別な意味を持っています。これらは特殊文字としてではなく通常の文字として扱われるためにバックスラッシュでエスケープする必要があります。 [\^\|]

Pattern.quote()方法は、与えられた文字列の特殊文字のすべてをエスケープするために使用することができる:例えば、次の正規表現は、すべてのキャレット(^)とパイプ(|)文字(バックスラッシュに注意してください)が一致します。

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

文字クラスが一つだけの文字と一致していることに注意してください。したがって、正規表現[^\^\|\|\^]は、^および|,以外のすべての文字と一致します。は、^||^以外のすべての文字です。文字列の区切り文字(^||^)の数を数えたい場合は、String.indexOf(String, int)メソッドを使用する方が良いでしょう。

関連する問題