2009-07-26 23 views
1

誰かが私が正規表現は、文字列が最初の文字列が正しく

a      // true 
тодорхойгүй гишүүн\n // false 
ямар нэг    // false 
нэгэн     // false 
a good deal    // true 
нэлээн     // false 
a long face    // true 
уруу царай    // false 
... 

私のJavaコード

while ((strLine = br.readLine()) != null) { 
// string from file 

       Pattern pattern = Pattern.compile("[\\sa-zA-Z]{1,}"); 
       Matcher matcher = pattern.matcher(strLine); 
       if (matcher.matches()) { 
        System.out.print(true+ "\n"); 
       } else { 
        System.out.print(false + "\n"); 
        } 
      } 

出力

false // there is problem this line must true 
false 
false 
false 
true 
false 
true 
false 

なぜ以下含むファイルを持っている 私を助けると一致していませmatcher.matches読みます初めて一致しません。

I inserted blank line into start of file then output 

false 
true // this line was false before i insert blank line 
false 
false 
false 
true 
false 
true 
false 
+0

この* while *ループ内のすべてのコードを 'System.out.println(strLine.matches(" [\ sa sa-zA-Z] +));に置き換えることができます; –

答えて

0

あなたはそれが不思議です+

+0

これはまさにです彼が持っている正規表現に相当する。何も変わるべきではありません。 – Avi

+0

はい.Javaは「不正なエスケープ文字」を通知します。正規表現に問題はないと思います。 –

2

を[\ SA-ZA-Z]を試してみました。あなたは慎重にhexdumpが付いたファイルの最初の数行を調べるためにしようとする場合があります:

head -2 file | hexdump -C 

これはバイトが行の先頭にある正確に何を教えてください。

0

最初の2つのライン

a 
тодорхойгүй гишүүн 

hexdumpに対して

0000-0010: ef bb bf 61-0d 0a d1 82-d0 be d0 b4-d0 be d1 80 ...a.... ........ 
0000-0020: d1 85 d0 be-d0 b9 d0 b3-d2 af d0 b9-20 d0 b3 d0 ........ ........ 
0000-0029: b8 d1 88 d2-af d2 af d0-bd      ........ . 
+1

最初の3文字はASCIIではありません。これは本当にシンプルなテキストファイルだと確信していますか?どのようにそれを作成していますか? –

+1

これらの3バイトはUTF-8 BOM [*]です。その使用はUnicode Consortiumでは推奨されていませんが、UTF-8(Windows Notepadが最も有名な例です)としてファイルを保存すると、多くのエディタがそれを挿入します。 [*] http://en.wikipedia.org/wiki/UTF-8#Byte-order_mark –

0

Iは、第3つの非ASCIIコードを除去することにより問題を解決しました。

+0

これは本当に解決策ではありませんが、できることはすべてあります。ファイルを作成している場合は、BOMなしでUTF-8 *として保存するかどうかを確認してください。 –