检查字符串是否是标点字符

sep*_*ian 12 java string-comparison punctuation

假设我有一个包含一些字母和标点符号的String数组

String letter[] = {"a","b","c",".","a"};
Run Code Online (Sandbox Code Playgroud)

在信[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");
    }
}
Run Code Online (Sandbox Code Playgroud)

das*_*ght 56

以下是使用正则表达式执行此操作的一种方法:

if (Pattern.matches("\\p{Punct}", str)) {
    ...
}
Run Code Online (Sandbox Code Playgroud)

\p{Punct}正则表达式是表示单个一POSIX图案标点字符.


Kar*_*k T 22

你想检查除了以外的更多标点符号.吗?

如果是这样,你可以这样做.

String punctuations = ".,:;";//add all the punctuation marks you want.
...
if(punctuations.contains(letter[a]))
Run Code Online (Sandbox Code Playgroud)

  • 此解决方案意味着您手动指定所有标点符号."标点符号"的定义肯定是不完整的. (3认同)

Han*_*nde 15

根据您的需要,您可以使用其中之一

Pattern.matches("\\p{Punct}", str)
Run Code Online (Sandbox Code Playgroud)

要么

Pattern.matches("\\p{IsPunctuation}", str)
Run Code Online (Sandbox Code Playgroud)

第一个模式匹配以下32个字符: !"#$%&'()*+,-./:;<=>?@[\]^_`{|}~

所述第二图案相匹配的高达632个Unicode字符,包括,例如:«,», ¿,¡,§,,,,,和.

有趣的是,并非所有与第一个模式匹配的32个字符都与第二个模式匹配.第二图案并不能:以下9个字符相匹配?,$,+,<,=,>,^,`,和|(其中,所述第一图案匹配).

如果要匹配任一字符集中的任何字符,您可以执行以下操作:

Pattern.matches("[\\p{Punct}\\p{IsPunctuation}]", str)
Run Code Online (Sandbox Code Playgroud)