java中判断字符串中汉字的个数

使用方法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]";
		ArrayList<String> list = new ArrayList<String>();// 定义一个列表用于存放找到的中文
		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<s.length;i++){
		// System.out.println(s[i]);
		// }
		System.out.println(ss.split(regex).length - 1);
	}
}

猜你喜欢

转载自blog.csdn.net/qq_42451835/article/details/83547570
今日推荐