[TOC]

Java判断字符串中是否包含中英文标点符号 /** * 该函数判断一个字符串是否包含标点符号(中文英文标点符号)。

方法一

Java判断字符串中是否包含中英文标点符号

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
/**
* 该函数判断一个字符串是否包含标点符号(中文英文标点符号)。
* 原理是原字符串做一次清洗,清洗掉所有标点符号。
* 此时,如果原字符串包含标点符号,那么清洗后的长度和原字符串长度不同。返回true。
* 如果原字符串未包含标点符号,则清洗后长度不变。返回false。
* @param s
* @return
*/
public boolean check(String s) {
boolean b = false;

String tmp = s;
tmp = tmp.replaceAll("\\p{P}", "");
if (s.length() != tmp.length()) {
b = true;
}

return b;
}

主要是使用了正则匹配:

1
replaceAll("\\p{P}", "");

replaceAll里面的正则匹配可以被使用来把字符串中的中英文标点符号全部清空只保留数字英文和中文。

Unicode 编码并不只是为某个字符简单定义了一个编码,而且还将其进行了归类。

/pP 其中的小写 p 是 property 的意思,表示 Unicode 属性,用于 Unicode 正表达式的前缀。

大写 P 表示 Unicode 字符集七个字符属性之一:标点字符。

其他六个是

  • L:字母;
  • M:标记符号(一般不会单独出现);
  • Z:分隔符(比如空格、换行等);
  • S:符号(比如数学符号、货币符号等);
  • N:数字(比如阿拉伯数字、罗马数字等);
  • C:其他字符

上面这七个是属性,七个属性下还有若干个子属性,用于更进一步地进行细分。

方法二:

写正则表达式:

1
2
3
4
Pattern patPunc =
Pattern.compile("[`~!@#$^&*()=|{}':;',\\[\\].<>/?~!@#¥……&*()——|{}【】‘;:”“'。,、?]");


如果要判断字符串最后一个字符是否为标点符号则可以在最后加上$符号:

1
2
Pattern patPunc =
Pattern.compile("[`~!@#$^&*()=|{}':;',\\[\\].<>/?~!@#¥……&*()——|{}【】‘;:”“'。,、?]$");
1
2
3
4
5
6
7
Pattern patPunc = Pattern.compile("[`~!@#$^&*()=|{}':;',\\[\\].<>/?~!@#¥……&*()——|{}【】‘;:”“'。,、?]$");

String str = "同!意";

Matcher matcher = patPunc.matcher(str);

System.out.println(matcher.find()); // false
1
2
3
4
5
6
7
Pattern patPunc = Pattern.compile("[`~!@#$^&*()=|{}':;',\\[\\].<>/?~!@#¥……&*()——|{}【】‘;:”“'。,、?]$");

String str = "同意!";

Matcher matcher = patPunc.matcher(str);

System.out.println(matcher.find()); // true