餐饮业店面品牌:在java如何判断字符串有多少中文字?

来源:百度文库 编辑:中财网 时间:2024/04/30 06:27:26
在java如何判断字符串有多少中文字?2007-04-18 20:04

用正则表达式[\u4e00-\u9fa5]
public static void main(String[] args) {
         int count=0;
String regEx = "[\\u4e00-\\u9fa5]";
//System.out.println(regEx);
String str = "中文fdas";
//System.out.println(str);
Pattern p = Pattern.compile(regEx);
Matcher m = p.matcher(str);
while (m.find()) {
for (int i = 0; i <= m.groupCount(); i++) {
                 count=count+1;
}
}
System.out.println("共有"+count+"个");
}

 

更简单的方法

public static void main(String[] args)
     {
         String input = "中文语言fd何as最近几天dafds工作dfds效率不高fdsf番dfsfdsa啊";
         String temp = null;
         Pattern p = Pattern.compile("[\u4E00-\u9FA5]+");
         Matcher m = p.matcher(input);
         while (m.find())
         {
             temp = m.group(0);
             System.out.println(temp + ":" + temp.length());
         }
     }

补充:

使用这个两个包java.util.regex.Pattern;和java.util.regex.Matcher;

Pattern

正则表达式的编译表示形式。

指定为字符串的正则表达式必须首先被编译为此类的实例。然后,可将得到的模式用于创建 Matcher 对象,依照正则表达式,该对象可以与任意字符序列匹配。执行匹配所涉及的所有状态都驻留在匹配器中,所以多个匹配器可以共享同一模式。

因此,典型的调用顺序是

 Pattern p = Pattern.compile("a*b");            Matcher m = p.matcher("aaaaab");            boolean b = m.matches();

在仅使用一次正则表达式时,可以方便地通过此类定义 matches 方法。此方法编译表达式并在单个调用中将输入序列与其匹配。语句

 boolean b = Pattern.matches("a*b", "aaaaab");

等效于上面的三个语句,尽管对于重复的匹配而言它效率不高,因为它不允许重用已编译的模式。

此类的实例是不可变的,可供多个并发线程安全使用。Matcher 类的实例用于此目的则不安全。

Matcher

通过解释 Pattern字符序列 执行匹配操作的引擎。

通过调用模式的 matcher 方法从模式创建匹配器。创建匹配器后,可以使用它执行三种不同的匹配操作:

  • matches 方法尝试将整个输入序列与该模式匹配。

  • lookingAt 尝试将输入序列从头开始与该模式匹配。

  • find 方法扫描输入序列以查找与该模式匹配的下一个子序列。

每个方法都返回一个表示成功或失败的布尔值。通过查询匹配器的状态可以获取关于成功匹配的更多信息。

group

public String group(int group)
返回在以前匹配操作期间由给定组捕获的输入子序列。

对于匹配器 m、输入序列 s 和组索引 g,表达式 m.group(g)s.substring(m.start(g), m.end(g)) 是等效的。

捕获组是从 1 开始从左到右的索引。组零表示整个模式,因此表达式 m.group(0) 等效于 m.group()

如果该匹配成功了,但指定组未能匹配输入序列的任何部分,则返回 null。注意,某些组(例如,(a*))匹配空字符串。当这些的组成功匹配输入中的空字符串时,此方法将返回空字符串。

 

指定者:
接口 MatchResult 中的 group
参数:
group - 此匹配器模式中捕获组的索引。
返回:
在以前的匹配期间组所捕获的子序列(可能为空);如果组未能匹配输入的部分,则返回 null
抛出:
IllegalStateException - 如果没有尝试任何匹配,或者以前的匹配操作失败。
IndexOutOfBoundsException - 如果在给定索引的模式中不存在捕获组。

find

public boolean find()
尝试查找与该模式匹配的输入序列的下一个子序列。

此方法从匹配器区域的开头开始,如果该方法的前一次调用成功了并且从那时开始匹配器没有被重置,则从以前匹配操作没有匹配的第一个字符开始。

如果匹配成功,则可以通过 startendgroup 方法获取更多信息。

 

返回:
当且仅当输入序列的子序列匹配此匹配器的模式时才返回 true