假设我有一个包含一些字母和标点符号的String数组
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");
}
}
答案 0 :(得分:55)
以下是使用正则表达式的一种方法:
if (Pattern.matches("\\p{Punct}", str)) {
...
}
\p{Punct}
正则表达式是一个POSIX模式,表示单个标点字符。
答案 1 :(得分:20)
您是否要检查除.
以外的更多标点符号?
如果是这样,你可以这样做。
String punctuations = ".,:;";//add all the punctuation marks you want.
...
if(punctuations.contains(letter[a]))
答案 2 :(得分:11)
根据您的需要,您可以使用
Pattern.matches("\\p{Punct}", str)
或
Pattern.matches("\\p{IsPunctuation}", str)
第一个模式匹配以下32个字符:!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~
第二个模式匹配高达632个unicode字符,例如:«
,»
,¿
,¡
,§
,{{ 1}},¶
,‘
,’
,“
和”
。
有趣的是,并非所有与第一个模式匹配的32个字符都与第二个匹配。第二种模式不匹配以下9个字符:‽
,$
,+
,<
,=
,{{ 1}},>
,^
和`
(第一个模式 匹配)。
如果你想匹配 字符集中的任何字符,你可以这样做:
|
答案 3 :(得分:1)
尝试此方法:Character.isLetter()。如果字符是字母(a-z,大写或小写),则返回true;如果字符是数字或符号,则返回false。
e.g。 boolean answer = Character.isLetter('!');
答案将等于假。答案 4 :(得分:0)
我尝试过正则表达式:“[\\p{Punct}]
”或“[\\p{IsPunctuation}]
”或没有 []
,它不能按预期工作。
我的字符串是:
How are you?
,甚至"How are you?", he asked.
然后调用:my_string.matches(regex);
但它似乎只识别字符串是否只有一个标点符号(例如“?
”、“.
”、...)。>
只有这个正则表达式对我有用:“(.*)[\\p{P}](.*)
”,它将包含标点符号的所有前面和后面的字符,因为 matches()
需要匹配所有句子。
答案 5 :(得分:-1)
导入字符串 ... if(string.punctuation.contains(letter [a]))
答案 6 :(得分:-2)
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;
}