piromanlynx
@piromanlynx
Системный администратор в Perfect Solutions

Как искать в строке по русскому шаблону в Java?

Сразу извиняюсь за тривиальный вопрос, в Java я новичек. Есть набор строк вида:


Арктикот|data.28.xml|3029

Арктогея|data.84.xml|3898

Арлов|data.90.xml|19

Армавир|data.23.xml|628


Ищу по русскому слоку «кот», оно там точно есть:

кот|data.1.xml|4132


Ищу так:
while ((str = in.readLine()) != null) {
   //keyword - текст "кот"
   if (str.matches("^"+keyword+"\\|")){
     ....
   }
}



в итоге не находит… Есть подозрение что проблема в том что в регекспе русские символы. Как быть?
  • Вопрос задан
  • 7786 просмотров
Решения вопроса 1
barker
@barker
str.matches — это то же самое, что Pattern.compile(regexp).matcher(str).matches()
В вашем случае, как выше верно сказали, надо find. А вообще вам подойдёт и str.startsWith(«кот»).
Ответ написан
Пригласить эксперта
Ответы на вопрос 3
@Moxa
        String s = "кот|data.1.xml|4132";
        Pattern pattern = Pattern.compile("^" + "кот" + "\\|");
        Matcher matcher = pattern.matcher(s);
        System.out.println(matcher.find());
Ответ написан
Комментировать
leventov
@leventov
String.matches возвращает true, если строка полностью описывается регуляркой. «кот|» не совпадает с «кот|data.1.xml|4132». Добавьте звездочку в конце:
str.matches("^кот\\|*")
Ответ написан
BrightGenie
@BrightGenie
В Java есть некоторые не удобства при работе с регулярными выражениями и текстом содержащим уникод (читай кирилицу).

почитайте тут подробнее описано: stackoverflow.com/questions/4304928/unicode-equivalents-for-w-and-b-in-java-regular-expressions
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы