在java如何判断字符串有多少中文字?

小弟我以前用c语言的,最近做个课题,用java.不知道有没有好的方法,用于判断一个字符串中中文数量?

--------------------------------------------------------------------------------
回复1:
UP!

回复2:
str.toCharArray()根据中文中的编码点逐个判断


回复3:
楼上的能不能说的更清楚点:)


回复4:
用正则表达式[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+"个");
}


回复5:
楼上的方法好!
如果是判断连续的几个中文怎么改啊.谢谢啊.


回复6:
不知道有没有现成的,下面的方法可以参考一下。
public int numOfChineseChar(String sourStr) throws UnsupportedEncodingException{
int len = sourStr.length();
byte[] bytStr = sourStr.getBytes();
int intStr, count = 0;

for(int i = 0; i < bytStr.length; i++){
intStr = bytStr[i];
if(intStr < 0){//JAVA中中文字符是负的BYTE值。
count++;
i++; //中文字符是双字节。
}
}

return count;
}


回复7:
String regEx = "[\u4e00-\u9fa5]";
//System.out.println(regEx);
String str = "中文fda她jjs";
String tem= str.replaceAll(regEx,"aa");
System.out.println(""+(tem.length()-str.length()));
不好意思,修改一下楼上的程序.


回复8:
liugang9936033(开心就好) 您的方法有创意.
不知道有没有判断连续出现多少个中文的方法,
比如:"你好1233",连续出现2个中文.
而"你1233好",连续出现1个中文.
这个怎么办啊.有人帮帮我吗?
谢谢楼上所有的朋友!


回复9:
你把你个字符串的中的非中文的都过滤掉剩下的都是中文的 然后就取个数或其他操作不就可以了吗


回复10:
public class Zw {
char a;
int count=0;
//public String str="";
public void SetStr(String str){
//this.str=str;
for(int i=0;i<str.length();i++){
a=str.charAt(i);
if((a!='a')&&(a!='b')&&(a!='c')&&(a!='d')
&&(a!='e')&&(a!='f')&&(a!='g')&&(a!='h')
&&(a!='i')&&(a!='j')&&(a!='k')&&(a!='l')
&&(a!='m')&&(a!='n')&&(a!='o')&&(a!='p')
&&(a!='q')&&(a!='r')&&(a!='s')&&(a!='t')
&&(a!='u')&&(a!='v')&&(a!='w')&&(a!='x')
&&(a!='y')&&(a!='z')&&(a!='1')&&(a!='2')
&&(a!='3')&&(a!='4')&&(a!='5')&&(a!='6')
&&(a!='7')&&(a!='8')&&(a!='9')&&(a!='0')
&&(a!=',')&&(a!='.')&&(a!='/')&&(a!=';')
&&(a!=' ')&&(a!='[')&&(a!=']')&&(a!='\')){
count++;
continue;
}

}
System.out.println("COUNT的值为:"+count);
}


/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Zw z= new Zw();
z.SetStr("zhongwen中文");

}

}
你可以通过字母,数字和特殊字符的编码进行判断,我那些都忘了,只好写成这样了,如果是大小写字母的话在String类中 有不区分大小的方法 哎好久不干这个了都忘光了


回复11:
可以,还是用上面的方法,计算出连续负数的byte只就可以了
然后将负数的byte值的个数除以2就可以得到。


回复12:
public static void main(String[] args) {
int count = 0;
String regEx = "[u4e00-u9fa5]+[^u4e00-u9fa5]";
String str = "ss中文文fdas文";
Pattern p = Pattern.compile(regEx);
Matcher m = p.matcher(str);
String repStr = null;
while (m.find()) {
repStr = m.group();
}
String regEx1 = "[u4e00-u9fa5]";
Pattern p1 = Pattern.compile(regEx1);
Matcher m1 = p1.matcher(repStr);
while (m1.find()) {
count = count + 1;
}
System.out.println("连续出现" + count + "个中文");
}
虽然程序写得很垃圾,但是达到要求了。


回复13:
package com.biaoflying;

import java.util.regex.*;
import java.util.*;

public class CountNum{
private static String str = "中文语言fd何as最近几天dafds" +
"工作dfds效率不高fdsf番dfsfdsa啊";
private static Pattern p;
private static Matcher m;
//private static int count=0;

public static int getNum(String str){
int count=0;
String regEx = "[\u4e00-\u9fa5]";
p = Pattern.compile(regEx);
m = p.matcher(str);
while(m.find())count++;
return count;
}
public static int alonechar(String str){
int together=0;
Map map=charLinked(str);
Iterator iter=map.values().iterator();
while(iter.hasNext()){
together+=((Integer)iter.next()).intValue();
}
return getNum(str)-together;
}
public static Map charLinked(String str){
Map map=new HashMap();
String temp=null;
String regEx = "[\u4e00-\u9fa5][\u4e00-\u9fa5]+";
p = Pattern.compile(regEx);
m = p.matcher(str);
while(m.find()){
temp=m.group();
map.put(temp,new Integer(temp.getBytes().length/2));
}
return map;
}
public static void main(String[] args) {
System.out.println(getNum(str));
System.out.println(charLinked(str));
System.out.println(alonechar(str));
}
}

回复14:
17
{效率不高=4, 最近几天=4, 工作=2, 中文语言=4}
3


回复15:
String regEx = "[^u4e00-u9fa5]+";
String str = "中文f1d3a她jjs";
String[] tem= str.split(regEx);


下面是测试结果,剩下就是你自己处理了。
//String str = "ssss中文f1d3a她jjs"-----[, 中文, 她]
//String str = "中文f1d3a她jjs"-------[中文, 她]


回复16:
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());
}
}


回复17:
= =路过 看看


回复18:
好贴,学习


回复19:
小弟谢谢上面各位了!
可以封贴了:)


回复20:
mark


回复21:
最后应该从二进制buffer开始分析。


回复22:
编码不同,方法不一样。


回复23:
牛!


回复24:
来的够晚了我
哈哈
走了!!!!!!!!


回复25:
mark一下


回复26:
好是复杂啊


回复27:
up


回复28:
收了.


回复29:
路过,收藏。


回复30:
mark


回复31:不错
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值