使用方法3与方法4时需要注意一些问题,代码中会有注释。
代码如下:
package 包名;
import java.util.ArrayList;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class 类名 {
public static void main(String[] args) {
f0();
f1();
f2();
f3();
f4();
}
// 方法0,运用列表的部分知识
private static void f0() {
String regex = "[\u4e00-\u9fa5]";
ArrayListlist = new ArrayList();// 定义一个列表用于存放找到的中文
String ss = "java中求字符串中汉字的个数";
Pattern pattern = Pattern.compile(regex);// 定义模式,(模具)
Matcher matcher = pattern.matcher(ss); // 匹配结果
while (matcher.find()) { // 匹配结果读找到第一个
list.add(matcher.group());
}
System.out.println(list);
System.out.println(list.size());
}
// 方法1:利用String.replaceAll()将所有的汉字替换成空字符,利用其与原字符串的长度差得到汉字的个数。
public static void f1() {
String regex = "[\u4e00-\u9fa5]";
String ss = "java中求字符串中汉字的个数";
System.out.println(ss.length() - ss.replaceAll(regex, "").length());
}
// 方法2:类似于方法1,只不过是把每个汉字替换成两个字符
public static void f2() {
String regex = "[\u4e00-\u9fa5]";
String ss = "java中求字符串中汉字的个数";
System.out.println(ss.replaceAll(regex, "12").length() - ss.length());
}
// 方法3:将字符串转化为字节数组,每个汉字占2个字节(GBK),编码格式不同汉字所占的字节数也不同。(例如:utf-8中汉字占3个字节)
// 并且汉字转换成字节均为负数,可以使用注释掉的代码进行测试
// 使用此种方法需要注意,中文标点所占字节数与汉字相同
public static void f3() {
String ss = "java中求字符串中汉字的个数";
byte[] bytes = ss.getBytes();
int num = 0;
for (int i = 0; i < bytes.length; i++) {
if (bytes[i] < 0) {
num++;
i = i + 1;
}
// System.out.println(bytes[i]);
}
System.out.println(num);
}
// 方法4:将汉字作为分割标志,把字符串分割成字符数组。(字符数组长度-1)即为字符串中汉字个数
// 但此时汉字不能是最后一个字符,可以使用注释掉的代码进行测试
public static void f4() {
String regex = "[\u4e00-\u9fa5]";
String ss = "java中求字符串中汉字的个数。";
// String[]s=ss.split(regex);
// for(int i=0;i