2016-10-18 8 views
-1

regexを使用して文字列の情報を抽出しようとしています。実際には二つの入力文字列が全く同じで正規表現は1つの文字列にマッチしますが、同じ文字列には一致しません。

Pattern featureIndexValuePattern = Pattern.compile("([\\w_ \\-\\.\\=]+)\\s+(\\d+)"); 


String str = "member_currentCompany9042547 0"; 

String str1 = "member_currentCompany9042547 0"; 

Matcher match = featureIndexValuePattern.matcher(str); 

if (match.find()) { 
    System.out.println("FOUND!"); 
    System.out.println(match.group(0)); 
    System.out.println(match.group(1)); 
    System.out.println(match.group(2)); 
} 

match = featureIndexValuePattern.matcher(str1); 

if (match.find()) { 
    System.out.println("FOUND!"); 
    System.out.println(match.group(0)); 
    System.out.println(match.group(1)); 
    System.out.println(match.group(2)); 
} 

私が得る出力は、

FOUND! 
9042547 0 
9042547 
0 
FOUND! 
member_currentCompany9042547 0 
member_currentCompany9042547 
0 

で最初のものを除いてから、コピー、貼り付けをされています。デモのために、私は以下の(一見愚かなコード)を持っています後者はハードコーディングされています。なぜ出力が異なるのか分かりません。私はそれが文字エンコーディングだと思う。誰かがここで何が起こっているのか理解できるように助けてくれますか?

おかげで、 ニキル

+3

'str.equals(str1)'を印刷してみてください。例えば次のような違いがあります。非印字スペース、改行しない空白など。そして、それらが等しくない場合は、 'Arrays.toString(str.toCharArray())'と 'str1'と同じものを出力して、より簡単に違いを表示します。 –

+1

あなたのコードを使用して[同じ結果が得られました](https://ideone.com/dRYdvg) –

+0

'str.equals(str1)'は 'false'を返します。 –

答えて

0

コメントに続いてAndy Turnerさんの提案、

Arrays.toString(str.toCharArray()) 

を実行したときに、私は(9前)非印刷Unicode文字を見ることができる:

str: [m, e, m, b, e, r, _, c, u, r, r, e, n, t, C, o, m, p, a, n, y, , 9, 0, 4, 2, 5, 4, 7, , 0] 
str1: [m, e, m, b, e, r, _, c, u, r, r, e, n, t, C, o, m, p, a, n, y, 9, 0, 4, 2, 5, 4, 7, , 0] 

\\p{C}をパターンに追加すると問題が解決しました。

Nikhil

関連する問題