1. 程式人生 > >java中判斷字串中漢字的個數

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