java中判斷字串中漢字的個數
阿新 • • 發佈:2018-10-31
使用方法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); } }