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

22

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

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

在第三封信中,我们有 "."。

如何检查字符串是否为标点符号? 我们知道有许多可能的标点符号(,.?! 等)。

到目前为止,我的进展:

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

3
您可以使用正则表达式来实现这个目的。它非常方便。 - Smit
@smit,你能给我一个提示吗? - sephtian
这会给你一些想法:Java中的标点符号正则表达式 - Stanley
@sephtian 抱歉回复晚了。虽然我已经添加了答案,如果你想要使用它的话。 - Smit
7个回答

65

以下是使用正则表达式的一种方法:

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

\p{Punct} 正则表达式是一个 POSIX 模式,代表一个单独的标点符号字符


33

根据您的需求,您可以使用以下任一选项:

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

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

第二个模式匹配了整整632个Unicode字符,包括例如:«»¿¡§等。

有趣的是,第一个模式匹配的32个字符并不都被第二个模式所匹配。第二个模式不会匹配第一个模式未匹配的9个字符:$、+、<、=、>、^、`、| 和 ~。

如果要匹配任何一个字符集中的字符,可以这样做:

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

在这个例子中,Pattern 是从哪里来的?我得到了一个错误“VM718:1 Uncaught ReferenceError:Pattern 未定义”。 - Parseltongue
1
@Parseltongue 这个回答是针对Java的,不是JavaScript。 - Hans Brende

21

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

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

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

4
这个解决方案意味着您需要手动指定所有标点符号。 "标点符号" 的定义明显是不完整的。 - Frank-Rene Schäfer
1
这还不够。有很多语言都有不同的标点符号,甚至连拉丁字母表都没有覆盖到。 应该使用\p{P}或\p{Punctuation}。 - andreyro
1
这是不完整和不正确的解决方案,应该选择@Hans Brende作为正确答案。 - Jabir

3
尝试这个方法:Character.isLetter()。如果字符是字母(a-z,大写或小写),则返回true,如果字符是数字或符号,则返回false。
例如,boolean answer = Character.isLetter('!');
答案将等于false。

那种解决方案的问题在于,当您检查特殊字符如% ^ $时,您将始终得到false,因为它们不是字母。 - mebada
@mebada,有什么问题吗? - superPhreshHackerKid

1
我尝试了正则表达式: "[\\p{Punct}]" 或 "[\\p{IsPunctuation}]" 或不使用[],但结果并非预期。
我的字符串是:How are you?,甚至是"How are you?", he asked. 然后调用:my_string.matches(regex); 但似乎只识别字符串是否只有一个标点符号(例如"?","."等)。
只有这个正则表达式对我有效:"(.*)[\\p{P}](.*)",它将包括标点符号前面和后面的所有字符,因为matches()需要匹配整个句子。

-3

导入字符串 ... 如果(string.punctuation.contains(letter[a]))


-5

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;

}


1
这个问题要求使用Java,而不是JavaScript。 - Allan J.

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接