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

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

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");
    }
}

5 ответов


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

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

String punctutations = ".,:;";//add all the ones you want.
...
if(punctutations.contains(letter[a]))

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

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

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


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

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

или

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

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

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

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

если вы хотите соответствовать любому символу из или набор символов, вы могли бы сделать:

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

попробуйте этот метод: характер.isLetter(). Он возвращает true, если символ является буквой (a-z, верхний или нижний регистр), возвращает false, если символ является числовым или символом.

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

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


function has_punctuation(str) {

  var p_found = false;
  var punctuations = '`~!@#$%^&*()_+{}|:"<>?-=[]\;\'.\/,';
  $.each(punctuations.split(''), function(i, p) {
    if (str.indexOf(p) != -1) p_found = true;
  });

  return p_found;

}