искать строку в кодировке Unicode с помощью Java - PullRequest
0 голосов
/ 30 октября 2011

Как найти строку Unicode в файле с помощью 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);
   }}

1 Ответ

3 голосов
/ 30 октября 2011

Ну, есть три потенциальных источника проблем, которые я вижу:

  • Регулярное выражение может быть неправильным.Вы действительно нуждаетесь , чтобы использовать регулярное выражение?Вы пытаетесь сопоставить шаблон или просто простую строку?
  • Возможно, вам не удается получить не-ASCII ввод из командной строки.Вы должны вывести входную строку в терминах символов Unicode (см. Код позже).
  • Возможно, вы читаете файл в неправильной кодировке.В настоящее время вы используете FileReader, который всегда использует кодировку платформы по умолчанию.Какая кодировка файла, который вы пытаетесь прочитать?Я бы рекомендовал использовать FileInputStream в InputStreamReader, используя явную кодировку (например, UTF-8), которая соответствует файлу.

Для отладки значений real в строкахЯ обычно использовал бы что-то вроде этого:

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();
    }
}

Таким образом, вы можете увидеть точную кодовую точку UTF-16 в каждом char в строке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...