Не работает \\s для некоторых пробельных символов
Есть код:
String square = "";
if (title.contains("м²")) {
String regex = "\\d+([,.]\\d+)?\\s*м²";
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(title);
if (matcher.find()) {
square = matcher.group();
}
}
И есть строки:
Апартаменты-студия, 22,8 м², 1/5 эт.
2-к. квартира, 50 м², 4/5 эт.
Код не находит соответствия regex в строках. Само выражение проверял на сторонних сервисах - находит.
Что может быть?
Ответы (2 шт):
Проблема оказалась в каком-то непечатаемом символе. Выглядит как пробел, но пробелом не является.
В режиме отладки из title скопировал этот "пробел" в regex, и всё заработало.
Такая проблема может возникнуть, если между числом и единицей измерения используется неразрывный пробел.
В соответствии с документацией Java, класс \s (пробельный символ) соответствует регулярному выражению:
[ \t\n\x0B\f\r]
В то время как класс \h (горизонтальный пробельный символ) это:
[ \t\xA0\u1680\u180e\u2000-\u200a\u202f\u205f\u3000]
Чтобы в вашем регулярном выражении учесть неразрывный пробел, используйте комбинацию из двух классов [\s\h] вместо обычного \s.
Например:
String regex = "\\d+([,.]\\d+)?[\\s\\h]*м²"