#java #string #file #search #unicode
#java #строка #файл #Поиск #юникод
Вопрос:
Как выполнить поиск строки Юникода в файле с помощью Java? Ниже приведен код, который я пробовал.Он работает со строками, отличными от unicode.
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:
Что ж, я вижу три потенциальных источника проблем:
- Возможно, регулярное выражение неверно. Вам действительно нужно использовать регулярное выражение? Вы пытаетесь сопоставить шаблон или просто простую строку?
- Возможно, вам не удается получить ввод, отличный от ASCII, из командной строки. Вы должны вывести входную строку в терминах ее символов Юникода (см. Код позже).
- Возможно, вы читаете файл в неправильной кодировке. В настоящее время вы используете
FileReader
which всегда использует кодировку платформы по умолчанию. Какова кодировка файла, который вы пытаетесь прочитать? Я бы рекомендовал использоватьFileInputStream
wrapped in сInputStreamReader
использованием явной кодировки (например, UTF-8), которая соответствует файлу.
Для отладки реальных значений в строках я обычно использую что-то вроде этого:
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
строке.