Здесь есть несколько проблем.Сначала этот пример:
if (word.matches("[\\.|,|:|;|!|\\?]+"))
Это слегка 1 неверно по следующей причине:
- A
.
не нужно экранировать вкласс символов. - A
|
не означает чередование в классе символов. - A
?
не требуется экранировать в классе символов.
(Для получения более подробной информации прочитайте javadoc или учебник по регулярным выражениям Java.)
Таким образом, вы можете переписать вышеприведенное как:
if (word.matches("[.,:;!?]+"))
...Предполагая, что вы не хотите классифицировать символ канала как пунктуацию.
Теперь это:
if (word.matches("[\.|,|:|;|!|،|؛|..|...|؟|\?]+"))
У вас те же проблемы, что и выше.Кроме того, вы, кажется, использовали два и три символа полной остановки / точки вместо (предположительно) какого-либо символа Юникода.Я подозреваю, что они могут быть \ufbb7
или u061e
или \u06db
, но я не лингвист.(Конечно, 2 или 3 точки остановки неправильны.)
Так что же являются знаками препинания на арабском языке?
Если честно, я думаю, что ответ зависит от того, на какой источник вы смотрите, но Википедия сообщает :
Только арабский вопросительный знак ⟨؟⟩и арабская запятая ⟨،⟩ используется при обычном наборе текста на арабском языке, и запятая часто заменяется латинской запятой (,).
1 - Я имею в виду, что ошибки в этом примере в основном безвредны.Тем не менее, включение вами (10 раз) символа |
в класс означает, что вы неправильно классифицируете "трубу" как пунктуацию.