2011-10-30 17 views
0

javaを使用してファイル内のユニコード文字列を検索する方法は? 以下は私が試したコードです。これはユニコード以外の文字列を扱います。javaを使用してファイル内のユニコード文字列を検索

import java.util.regex.Matcher; 
    import java.util.regex.Pattern; 
    import java.io.*; 
    import java.util.*; 
    class file1 
    { 
    public static void main(String arg[])throws Exception 
    { 
    BufferedReader bfr1 = new BufferedReader(new InputStreamReader(
      System.in)); 
    System.out.println("Enter File name:"); 
    String str = bfr1.readLine(); 
    BufferedReader br=new BufferedReader(new InputStreamReader(System.in)); 
    String s; 
    int count=0; 
    int flag=0; 

    System.out.println("Enter the string to be found"); 
    s=br.readLine(); 
    BufferedReader bfr = new BufferedReader(new FileReader(str)); 
    String bfr2=bfr.readLine(); 
    Pattern p = Pattern.compile(s); 
      Matcher matcher = p.matcher(bfr2); 
      while (matcher.find()) { 
      count++; 
      }System.out.println(count); 
    }} 

答えて

3

まあ、私が見ることができる問題の3つの潜在的な発生源があります。

  • は正規表現が間違っている可能性があります。あなたは本当に正規表現を使用するにはが必要ですか?パターンや単純な文字列にマッチさせようとしていますか?
  • コマンドラインから非ASCII入力を取得できない可能性があります。入力文字列をUnicode文字でダンプする必要があります(後のコードを参照)。
  • 不適切なエンコーディングでファイルを読んでいる可能性があります。現在、プラットフォームのデフォルトのエンコーディングを常に使用するFileReaderを使用しています。あなたが読もうとしているファイルのエンコーディングは何ですか?ファイルに一致する明示的なエンコード(例:UTF-8)を使用してInputStreamReaderにラップされたFileInputStreamを使用することをおすすめします。

文字列で本当値をデバッグするために、私は通常、このようなものを使用します:あなたは、文字列内の各charで正確なUTF-16コード・ポイントを見ることができる方法

private static void dumpString(String text) { 
    for (int i = 0; i < text.length(); i++) { 
     char c = text.charAt(i); 
     System.out.printf("%d: %4h (%c)", i, c, c); 
     System.out.println(); 
    } 
} 

を。