如何使用正则表达式判断字符串中是否有中文,有的话输出。

RuibeChen 2014-11-25 12:06:46
功能:分类并输出字符串中的中文,大小写字母,空格以及符号。
问题:如何使用正则表达式判断并输出字符串中的中文?

PS:我知道下面这段代码有点丑,能否给我一段实现同样功能的代码参考一下。

package com.cjj.shiyiyueershisiri;

import java.util.Scanner;

/**
* 字符串分类
* @author prime_cjj
* function:输入一段字符串,判断是否有中文,有的话并输出,共有多少个大小写字母、数字空格号跟其他符号,并分别列出来
*/
public class StringClassified {

public static void main(String[] args) {
//存放字符串
String totalStr = null;
char[] totalStr1 = new char[400];
//存放小写字母
char[] abcStr = new char[100];
int abcCount = 0;
//存放大写字母
char[] ABCStr = new char[100];
int ABCCount = 0;
//存放数字
char[] num = new char[100];
int numCount = 0;
//存放符号
char[] seperateStr = new char[100];
int charCount = 0;
//空格符计数器
int konggeCount = 0;

System.out.println("请随意输入一段字符串~");
//读取键盘输入并存放到totalStr字符串中
totalStr = (new Scanner(System.in)).nextLine();
//将totalStr字符串转换为字符数组
totalStr1 = totalStr.toCharArray();

if(totalStr1.length != 0){
//判断是否存在中文
if(totalStr.matches(".*[\\u4e00-\\u9faf].*")){ //
System.out.println("存在中文");
}else{
System.out.println("不存在中文");
//判断并分组,并计数
for(int i = 0;i < totalStr1.length;i ++){
if(((totalStr1[i]+0) >= ('a'+0)) && ((totalStr1[i]+0) <= ('z'+0))){
abcStr[abcCount] = totalStr1[i];
abcCount++;
}else if(((totalStr1[i]+0) >= 65) && ((totalStr1[i]+0) <= 90)){
ABCStr[ABCCount] = totalStr1[i];
ABCCount++;
}else if(((totalStr1[i]+0) >= 48) && ((totalStr1[i]+0) <= 57)){
num[numCount] = totalStr1[i];
numCount++;
}else if(totalStr1[i] == ' '){
konggeCount++;
}else{ //如何识别所有符号? [\uFE30-\uFFA0]全角字符
seperateStr[charCount] = totalStr1[i];
charCount++;
}
}
}

//输出结果:
System.out.print("您输入的原始字符串为:"+totalStr+"\n");
System.out.println("其中分类如下:");

System.out.print("小写字母共有 "+abcCount+" 个,分别为:");
for(int i = 0;i < abcStr.length;i++){
System.out.print(abcStr[i]+" ");
}
System.out.println();

System.out.print("大写字母共有 "+ABCCount+" 个,分别为:");
for(int i = 0;i < ABCStr.length;i++){
System.out.print(ABCStr[i]+" ");
}
System.out.println();

System.out.print("数字共有 "+numCount+" 个,分别为:");
for(int i = 0;i < num.length;i++){
System.out.print(num[i]+" ");
}
System.out.println();

System.out.print("符号共有 "+charCount+" 个,分别为:");
for(int i = 0;i < seperateStr.length;i++){
System.out.print(seperateStr[i]+" ");
}
System.out.println();

System.out.print("空格号“ ”共有 "+konggeCount+" 个。");


}else
System.out.println("您没有输入任何字符!");
}

}


...全文
2041 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
RuibeChen 2014-11-29
  • 打赏
  • 举报
回复
引用 6 楼 ghx287524027 的回复:
 一些常用的正则匹配规则   匹配中文字符的正则表达式: [u4e00-u9fa5]   评注:匹配中文还真是个头疼的事,有了这个表达式就好办了   匹配双字节字符(包括汉字在内):[^x00-xff]   评注:可以用来计算字符串的长度(一个双字节字符长度计2,ASCII字符计1)   匹配空白行的正则表达式:ns*r   评注:可以用来删除空白行   匹配HTML标记的正则表达式:<(S*?)[^>]*>.*?|<.*? />   评注:网上流传的版本太糟糕,上面这个也仅仅能匹配部分,对于复杂的嵌套标记依旧无能为力   匹配首尾空白字符的正则表达式:^s*|s*$   评注:可以用来删除行首行尾的空白字符(包括空格、制表符、换页符等等),非常有用的表达式   匹配Email地址的正则表达式:w+([-+.]w+)*@w+([-.]w+)*.w+([-.]w+)*   评注:表单验证时很实用   匹配网址URL的正则表达式:[a-zA-z]+://[^s]*   评注:网上流传的版本功能很有限,上面这个基本可以满足需求   匹配帐号是否合法(字母开头,允许5-16字节,允许字母数字下划线):^[a-zA-Z][a-zA-Z0-9_]{4,15}$   评注:表单验证时很实用   匹配国内电话号码:d{3}-d{8}|d{4}-d{7}   评注:匹配形式如 0511-4405222 或 021-87888822   匹配腾讯QQ号:[1-9][0-9]{4,}   评注:腾讯QQ号从10000开始   匹配中国邮政编码:[1-9]d{5}(?!d)   评注:中国邮政编码为6位数字   匹配身份证:d{15}|d{18}   评注:中国的身份证为15位或18位   匹配ip地址:d+.d+.d+.d+   评注:提取ip地址时有用
虽然没有匹配符号(如,。)的,但是也非常感谢!
ghx287524027 2014-11-28
  • 打赏
  • 举报
回复
 一些常用的正则匹配规则   匹配中文字符的正则表达式: [u4e00-u9fa5]   评注:匹配中文还真是个头疼的事,有了这个表达式就好办了   匹配双字节字符(包括汉字在内):[^x00-xff]   评注:可以用来计算字符串的长度(一个双字节字符长度计2,ASCII字符计1)   匹配空白行的正则表达式:ns*r   评注:可以用来删除空白行   匹配HTML标记的正则表达式:<(S*?)[^>]*>.*?|<.*? />   评注:网上流传的版本太糟糕,上面这个也仅仅能匹配部分,对于复杂的嵌套标记依旧无能为力   匹配首尾空白字符的正则表达式:^s*|s*$   评注:可以用来删除行首行尾的空白字符(包括空格、制表符、换页符等等),非常有用的表达式   匹配Email地址的正则表达式:w+([-+.]w+)*@w+([-.]w+)*.w+([-.]w+)*   评注:表单验证时很实用   匹配网址URL的正则表达式:[a-zA-z]+://[^s]*   评注:网上流传的版本功能很有限,上面这个基本可以满足需求   匹配帐号是否合法(字母开头,允许5-16字节,允许字母数字下划线):^[a-zA-Z][a-zA-Z0-9_]{4,15}$   评注:表单验证时很实用   匹配国内电话号码:d{3}-d{8}|d{4}-d{7}   评注:匹配形式如 0511-4405222 或 021-87888822   匹配腾讯QQ号:[1-9][0-9]{4,}   评注:腾讯QQ号从10000开始   匹配中国邮政编码:[1-9]d{5}(?!d)   评注:中国邮政编码为6位数字   匹配身份证:d{15}|d{18}   评注:中国的身份证为15位或18位   匹配ip地址:d+.d+.d+.d+   评注:提取ip地址时有用
RuibeChen 2014-11-27
  • 打赏
  • 举报
回复
引用 3 楼 chengshaoyong1 的回复:
都学JAVA了 还是面向过程的编程习惯
谢谢你的指正,我已经修改了代码,java本来就是面向对象的思想。
RuibeChen 2014-11-27
  • 打赏
  • 举报
回复
引用 2 楼 qu1210 的回复:

import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * 字符串分类
 * @author prime_cjj
 * function:输入一段字符串,判断是否有中文,有的话并输出,共有多少个大小写字母、数字空格号跟其他符号,并分别列出来
 */
public class StringClassified {

	public static void main(String[] args) {
		checkfilename("输入一段字符串,ssss判断是否有中文dd,有的话并输d出,共有多w少个大小5写字母、数字空e6格号跟其他符号,并f分别列s出来");
		
	}
	
	 public static void checkfilename(String s){  
	        s=new String(s.getBytes());//用GBK编码
	        String pattern="[\u4e00-\u9fa5]+";  
	        Pattern p=Pattern.compile(pattern);  
	        Matcher result=p.matcher(s);                  
	        while (result.find()) {
				System.out.println(result.group());
			}
	  }

}


package com.cjj.upgrades;

import java.lang.reflect.Array;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class StringClassfied {
	
	static String str;
	
	public StringClassfied(){
		System.out.println("请随意敲击键盘,我可以帮你分析哦!");
		Scanner sc = new Scanner(System.in);  //创建一个Scanner对象用来读取键盘输入
		str = sc.nextLine();		//将读取到的数据转化为字符串类型
	}
	
	//分析
	public void ClassifyString(String str){
        /*
		 * 存在中文
		 * 判断
		 * public boolean matches(String regex)
		 * 告知此字符串是否匹配给定的正则表达式。
		 */
		if(str.matches(".*[\\u4e00-\\u9faf].*")){
			String pattern="[\u4e00-\u9fa5]";  //正则表达式
	        Pattern p=Pattern.compile(pattern);   //将给定的正则表达式编译到模式中。
	        Matcher result=p.matcher(str);    //创建匹配给定输入与此模式的匹配器。
          
	        ArrayList arrays = new ArrayList();
	        
	        while (result.find()) {	//如果匹配成功,则可以通过 start、end 和 group 方法获取更多信息。 
	        	//将中文存放到arrays中
	            arrays.add(result.group());
	        }
	        System.out.print("存在中文,有  "+arrays.size()+" 个字,分别为:");
	        Object[] zhongwen = arrays.toArray();
	        print(zhongwen);
		}else{
			System.out.println("不存在中文。");
		}
		
		System.out.println();
		
		//小写字母
		if(str.matches(".*[a-z].*")){
			String pattern="[a-z]";  //正则表达式
	        Pattern p=Pattern.compile(pattern);   //将给定的正则表达式编译到模式中。
	        Matcher result=p.matcher(str);    //创建匹配给定输入与此模式的匹配器。           
	        
	        ArrayList arrays = new ArrayList();
	        
	        while (result.find()) {	//如果匹配成功,则可以通过 start、end 和 group 方法获取更多信息。 
	        	//将对象存放到arrays中
	            arrays.add(result.group());
	        }
	        System.out.print("存在小写字母,有  "+arrays.size()+" 个,分别为:");
	        Object[] SmallLetter = arrays.toArray();
	        print(SmallLetter);
		}else{
			System.out.println("不存在小写字母。");
		}
		
		System.out.println();
		
		//大写字母
		if(str.matches(".*[A-Z].*")){
			String pattern="[A-Z]";  //正则表达式
	        Pattern p=Pattern.compile(pattern);   //将给定的正则表达式编译到模式中。
	        Matcher result=p.matcher(str);    //创建匹配给定输入与此模式的匹配器。           
	        
	        ArrayList arrays = new ArrayList();
	        
	        while (result.find()) {	//如果匹配成功,则可以通过 start、end 和 group 方法获取更多信息。 
	        	//将对象存放到arrays中
	            arrays.add(result.group());
	        }
	        System.out.print("存在大写字母,有  "+arrays.size()+" 个,分别为:");
	        Object[] SmallLetter = arrays.toArray();
	        print(SmallLetter);
		}else{
			System.out.println("不存在大写字母。");
		}
		
		System.out.println();
		
		//数字
		if(str.matches(".*[0-9].*")){
			String pattern="[0-9]";  //正则表达式
	        Pattern p=Pattern.compile(pattern);   //将给定的正则表达式编译到模式中。
	        Matcher result=p.matcher(str);    //创建匹配给定输入与此模式的匹配器。           
	        
	        ArrayList arrays = new ArrayList();
	        
	        while (result.find()) {	//如果匹配成功,则可以通过 start、end 和 group 方法获取更多信息。 
	        	//将对象存放到arrays中
	            arrays.add(result.group());
	        }
	        System.out.print("存在数字,有  "+arrays.size()+" 个,分别为:");
	        Object[] SmallLetter = arrays.toArray();
	        print(SmallLetter);
		}else{
			System.out.println("不存在数字。");
		}
		
		System.out.println();
		
		//空格号
		if(str.matches(".*[ ].*")){
			String pattern="[ ]";  //正则表达式
	        Pattern p=Pattern.compile(pattern);   //将给定的正则表达式编译到模式中。
	        Matcher result=p.matcher(str);    //创建匹配给定输入与此模式的匹配器。           
	        
	        ArrayList arrays = new ArrayList();
	        
	        while (result.find()) {	//如果匹配成功,则可以通过 start、end 和 group 方法获取更多信息。 
	        	//将对象存放到arrays中
	            arrays.add(result.group());
	        }
	        System.out.print("存在空格号,有  "+arrays.size()+" 个");
	        
		}else{
			System.out.println("不存在空格号。");
		}
		
		System.out.println();
		
		//符号
		if(str.matches(".*[^A-Za-z0-9_].*")){
			String pattern="[^A-Za-z0-9_]";  //正则表达式
	        Pattern p=Pattern.compile(pattern);   //将给定的正则表达式编译到模式中。
	        Matcher result=p.matcher(str);    //创建匹配给定输入与此模式的匹配器。           
	        
	        ArrayList arrays = new ArrayList();
	        
	        while (result.find()) {	//如果匹配成功,则可以通过 start、end 和 group 方法获取更多信息。 
	        	//将对象存放到arrays中
	            arrays.add(result.group());
	        }
	        System.out.print("存在符号,有  "+arrays.size()+" 个,分别为:");
	        Object[] SmallLetter = arrays.toArray();
	        print(SmallLetter);
		}else{
			System.out.println("不存在数字。");
		}
		
		System.out.println();
		
		
		
	}
	
	public void print(Object[] obj){
		for(int i = 0;i < obj.length;i++){
			System.out.print(obj[i]+" ");
		}
	}
	
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		StringClassfied sc1 = new StringClassfied();
		sc1.ClassifyString(str);
		
	}

}

感谢你的提示,我查阅了API以及搜索了正则表达式的使用。 根据你的提示,我修改了下代码(如上),但是有一个问题,就是符号比如逗号,句号如何用正则表达式来判断?
chengshaoyong1 2014-11-26
  • 打赏
  • 举报
回复
都学JAVA了 还是面向过程的编程习惯
RuibeChen 2014-11-25
  • 打赏
  • 举报
回复
System.out.print("小写字母共有 "+abcCount+" 个,分别为:");
            for(int i = 0;i < abcStr.length;i++){
                System.out.print(abcStr[i]+" ");
            }
            System.out.println();
我知道这些重复的代码最好用函数来是实现。 但这个毕竟只是测试类。
qzw1210 2014-11-25
  • 打赏
  • 举报
回复

import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * 字符串分类
 * @author prime_cjj
 * function:输入一段字符串,判断是否有中文,有的话并输出,共有多少个大小写字母、数字空格号跟其他符号,并分别列出来
 */
public class StringClassified {

	public static void main(String[] args) {
		checkfilename("输入一段字符串,ssss判断是否有中文dd,有的话并输d出,共有多w少个大小5写字母、数字空e6格号跟其他符号,并f分别列s出来");
		
	}
	
	 public static void checkfilename(String s){  
	        s=new String(s.getBytes());//用GBK编码
	        String pattern="[\u4e00-\u9fa5]+";  
	        Pattern p=Pattern.compile(pattern);  
	        Matcher result=p.matcher(s);                  
	        while (result.find()) {
				System.out.println(result.group());
			}
	  }

}

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧