重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
可以使用正则表达式+中文字符编码区间验证一个字符串中是否包含汉字
创新互联主营德保网站建设的网络公司,主营网站建设方案,app软件定制开发,德保h5微信小程序开发搭建,德保网站营销推广欢迎德保等地区企业咨询
代码如下:
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点抗 pile(regEx);
Matcher m = p.matcher(str);
while (m.find()) {
for (int i = 0; i = m.groupCount(); i++) {
count = count + 1;
}
}
System.out.println("共有 " + count + "个 ");
}
【实例描述】
字符串中可以包含数字,字母、汉字或者其他字符。使用Character类的isDigit()方法可以判断字符中的某个字符是否为数字,使用Character类的isLetter()方法可以判断字符中的某个字符是否为字母。实例中将介绍一种方法用来判断字符串中的某个字符是否为汉字,通过此方法可以计算字符串中汉字的数量。实例的运行效果如图4.24所示。
【实现过程】
在Eclipse中新建项目ChineseCharacter,并在其中创建一个ChineseCharacter.java文件。在该类的主方法中创建标准输入流的扫描器对象,接收用户输入的字符串。我们在程序中使用matches()方法来统计该字符串中汉字的个数。核心代码如下所示:
protectedvoiddo_button_actionPerformed(ActionEvente){Stringtext=chineseArea.getText();//获取用户输入intamount=0;//创建汉字数量计数器for(inti=0;itext.length();i++){//遍历字符串每一个字符//使用正则表达式判断字符是否属于汉字编码booleanmatches=Pattern.matches("^[\u4E00-\u9FA5]{0,}$",""+text.charAt(i));if(matches){//如果是汉字amount++;//累加计数器}}umField.setText(amount+"");//在文本框显示汉字数量}
【代码解析】
本实例的关键点在于正则表达式的使用。Java提供了Pattern用于正则表达式的编译表示形式,该类提供的静态方法matches()可以执行正则表达式的匹配。该方法编译给定正则表达式并尝试给定输入与其匹配。如果要匹配的字符序列与正则表达式匹配则返回true,否则返回false。其声明语法如下:
publicstaticbooleanmatches(Stringregex,CharSequenceinput);【知识扩展】
使用正则表达式可以方便地进行字符串操作,正则表达式经常被用来验证用户输入的信息,如可以判断用户输入的格式是否正确。本实例中使用正则表达式来判断用户输入的字符串是否为汉字,如果为汉字则计数器加1,最后得到字符串中所有汉字的数量。
出现乱码我想应该是这样的情况
1.你的代码中有汉字,默认情况下都是GB2312码表,如果你将.java文件以UTF-8的编码存储,那么.java文件里的都是UTF-8形式的数据了
2.如果在DOS里出现汉字的话,这个汉字是采用系统默认的也就是GB2312码表进行解码的
.java文件在内存中以二进制数据存在即00101010这种样式,我以UTF-8解码成二进制,则必须以UTF-8编码才能得到我们所能看到的内容, 有时候我们看网页或者一些文件用记事本打开全是乱码,这个就是码表用错了的缘故,有时候我们只需要换换码表,就轻松解决了
命令行是在dos系统下运行,因为dos不支持汉子,所以命令行下不支持汉子,与java本身支持不支持无关.
另外,三楼的朋友,纯dos下要实现汉字需要自己动手弄汉字库吧,或者用图形方法画出来,字符流错了肯定会出现乱码,但这里的乱码不一定是字符流的问题。当然如果你的系统实现了汉字库,或者是用了中国特色的dos版本,那倒是可以的。
也就是说,首先dos能支持才行,然后才是字符流的问题,当然也可能是别的其他问题。这是我的理解,错了请指教 呵呵