Проверить, является ли строка знаком пунктуации

Скажем, у меня есть массив строк, содержащий буквы и знаки препинания.

String letter[] = {"a","b","c",".","a"};

В букве [3] у нас есть "."

Как я могу проверить, является ли строка знаком пунктуации? Мы знаем, что существует множество возможных знаков препинания (,.?! и т.д.)

Мой прогресс на данный момент:

for (int a = 0; a < letter.length; a++) {
    if (letter[a].equals(".")) { //===>> i'm confused in this line
        System.out.println ("it's punctuation");
    } else {
        System.out.println ("just letter");
    }
}

person sephtian    schedule 18.12.2012    source источник
comment
Вы можете использовать регулярное выражение для этой цели. Это очень удобно.   -  person Smit    schedule 18.12.2012
comment
@smit, можешь подсказать?   -  person sephtian    schedule 18.12.2012
comment
Это даст вам некоторое представление: Регулярное выражение пунктуации в Java   -  person Stanley    schedule 18.12.2012
comment
@sephtian Извините за поздний ответ. Хотя я добавил ответ, если вы хотите его использовать.   -  person Smit    schedule 18.12.2012


Ответы (6)


Вы хотите проверить больше знаков препинания, кроме .?

Если это так, вы можете сделать это.

String punctuations = ".,:;";//add all the punctuation marks you want.
...
if(punctuations.contains(letter[a]))
person Karthik T    schedule 18.12.2012
comment
Это решение подразумевает, что вы вручную указываете все знаки препинания. Определение «пунктуация» определенно неполное. - person Frank-Rene Schäfer; 09.03.2016
comment
Этого недостаточно. Есть много языков, которые имеют разные знаки препинания. Они даже не охватывают латинский алфавит. Вместо этого используйте \p{P} или \p{Punctuation} - person andreyro; 16.01.2018

Вот один из способов сделать это с помощью регулярных выражений:

if (Pattern.matches("\\p{Punct}", str)) {
    ...
}

Регулярное выражение \p{Punct} представляет собой шаблон POSIX, представляющий один знак пунктуации.

person Sergey Kalinichenko    schedule 18.12.2012

В зависимости от ваших потребностей вы можете использовать либо

Pattern.matches("\\p{Punct}", str)

or

Pattern.matches("\\p{IsPunctuation}", str)

Первый шаблон соответствует следующим 32 символам: !"#$%&'()*+,-./:;<=>?@[\]^_`{|}~

Второй шаблон соответствует колоссальным 632 символам Юникода, включая, например: «, », ¿, ¡, §, , , , , и .

Интересно, что не все из 32 символов, соответствующих первому шаблону, соответствуют второму. Второй шаблон не соответствует следующим 9 символам: $, +, <, =, >, ^, `, | и ~ (которые первый шаблон соответствует ).

Если вы хотите сопоставить любой символ из набора символов любой, вы можете сделать следующее:

Pattern.matches("[\\p{Punct}\\p{IsPunctuation}]", str)
person Hans Brende    schedule 15.03.2018
comment
Откуда берется Паттерн в этом примере? Я получаю сообщение об ошибке VM718: 1 Uncaught ReferenceError: шаблон не определен - person Parseltongue; 22.10.2020
comment
@Parseltongue этот ответ для Java, а не для JavaScript - person Hans Brende; 22.10.2020

Попробуйте этот метод: Character.isLetter(). Он возвращает true, если символ представляет собой букву (az, прописную или строчную), возвращает false, если символ является цифрой или символом.

например логический ответ = Character.isLetter('!');

ответ будет равен false.

person Jj Tuibeo    schedule 18.12.2012
comment
проблема с этим решением заключается в том, что когда вы проверяете специальные символы, такие как % ^$ .. вы всегда получаете false, и они не являются буквами - person mebada; 03.08.2018
comment
@mebada в чем проблема? - person superPhreshHackerKid; 16.05.2020

Я пробовал регулярное выражение: [\\p{Punct}] или [\\p{IsPunctuation}] или без [], оно не работает должным образом.

Моя строка: How are you? или даже "How are you?", he asked.

Затем вызовите: my_string.matches(regex);, но похоже, что он распознает, только если строка содержит только один знак препинания (например, ?, .,...).

У меня работает только это регулярное выражение: (.*)[\\p{P}](.*), оно будет включать все предшествующие и последующие символы пунктуации, потому что matches() требует соответствия всему предложению.

person Nguyen Tan Dat    schedule 10.06.2021

импортировать строку ... если (строка.пунктуация.содержит (буква [а]))

person jfranzoy    schedule 31.01.2019