判断字符串中的英文字母汉字空格和其他字符个数

本文介绍了一个Java程序,该程序能够判断输入的字符串中包含的汉字、英文字母、数字及空格的数量,并计算出非汉字字母数字空格的个数。

接口:

package algorithm.sort.dao;


public interface CharacterJudgment {
/*判断字符串是不是汉字*/
public int isChinese(String con);
/* 判断是不是中文或英文字母*/
public int conValidate(String con);
/* 判断字符串是不是数字*/
public int isNumeric(String str);
/*判断空格*/
public int  spaceCharacter(String str);

}

实现类:

package algorithm.sort.imp;


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


import algorithm.sort.dao.CharacterJudgment;


public class CharacterJudgmentImp implements CharacterJudgment{
@Override
public int isChinese(String str) {


int count = 0;  
       Pattern p = Pattern.compile("[\\u4e00-\\u9fa5]");  
       Matcher m = p.matcher(str);  
       while(m.find()){  
           count++;  
       }  
       return count;  
   }  



/* 判断是不是中文或英文字母*/
@Override
public int conValidate(String str) {
int count = 0;  
        Pattern p = Pattern.compile("[a-zA-Z]");  
        Matcher m = p.matcher(str);  
        while(m.find()){  
            count++;  
        }  
        return count;  
}




/* 判断字符串是不是数字*/
@Override
public int isNumeric(String str) {


int count = 0;  
// Pattern pattern = Pattern.compile("[0-9]*");
       Pattern p = Pattern.compile("\\d");  
       Matcher m = p.matcher(str);  
       while(m.find()){  
           count++;  
       }  
       return count; 

}




/*判断空格的个数*/
@Override
public int spaceCharacter(String str) {
int count = 0;
if(null==str){
 count ++;
}else{
for(int i=0;i<str.length();i++){
char tmp = str.charAt(i);
if(tmp ==' '){
count++;
}
}
}
return count;
}

}

测试类:



package test;


import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Scanner;


import algorithm.sort.dao.CharacterJudgment;
import algorithm.sort.imp.CharacterJudgmentImp;


public class Test3 {


/**
* @param args
* @throws IOException 
*/
public static void main(String[] args) throws IOException {
CharacterJudgment  chajud = new CharacterJudgmentImp();
//Scanner sc = new Scanner(System.in);
//String con =" 有你的世界真好 LOVE 5201314 ";
System.out.println("请输入字符串:");
//String con = sc.nextLine();
BufferedReader br = new BufferedReader(
new InputStreamReader(System.in));
String con = br.readLine();
System.out.println("您输入的字符串是:"+con);
int count=chajud.isChinese(con);
int count1 = chajud.conValidate(con);
int count2 = chajud.isNumeric(con);
int count3 = chajud.spaceCharacter(con);
//非汉字 字母 数字 空格 的个数
int all = con.length();
int count4=0;
count4 = all-count-count1-count2-count3;
System.out.println("汉字个数为:"+count);
System.out.println("英文字母个数为:"+count1);
System.out.println("数字个数为:"+count2);
System.out.println("空格的个数为:"+count3);
System.out.println("其他字符个数为:"+count4);

}


}

<think>我们需要判断一个字符串是否同时包含字母数字。 思路: 1. 遍历字符串的每个字符。 2. 设置两个标志位:hasLetter(是否有字母)hasDigit(是否有数字)。 3. 遍历过程中,如果当前字符是字母,则将hasLetter设为true;如果是数字,则将hasDigit设为true。 4. 遍历结束后,检查hasLetterhasDigit是否都为true。 注意:在Java中,我们可以使用Character类的isLetterisDigit方法来判断字符类型。 示例代码:</think>### 判断字符串是否同时包含字母数字 #### 实现代码 ```java public class StringValidator { public static boolean containsLetterAndDigit(String input) { boolean hasLetter = false; boolean hasDigit = false; for (char c : input.toCharArray()) { if (Character.isLetter(c)) { hasLetter = true; } else if (Character.isDigit(c)) { hasDigit = true; } // 提前终止循环的条件 if (hasLetter && hasDigit) { return true; } } return false; } public static void main(String[] args) { String test1 = "Hello123"; // 同时包含字母数字 String test2 = "12345"; // 仅数字 String test3 = "Abcdef"; // 仅字母 String test4 = "!@#$%"; // 特殊字符 System.out.println(containsLetterAndDigit(test1)); // true System.out.println(containsLetterAndDigit(test2)); // false System.out.println(containsLetterAndDigit(test3)); // false System.out.println(containsLetterAndDigit(test4)); // false } } ``` #### 代码解释 1. **核心逻辑**: - 使用两个布尔标志 `hasLetter` `hasDigit` 分别跟踪字母数字的存在状态 - 遍历字符串的每个字符: - `Character.isLetter(c)` 检测字母(包括大小写) - `Character.isDigit(c)` 检测数字(0-9) - 当两个标志同时变为 `true` 时立即返回结果(优化性能) 2. **关键方法**: - `Character.isLetter()`:识别 Unicode 字母(包括中文等非英文字母) - `Character.isDigit()`:识别 Unicode 数字字符(如全角数字) 3. **设计特点**: - **提前终止**:当同时检测到字母数字时立即退出循环 - **精确匹配**:严格区分字母/数字与其他字符(如标点符号) - **Unicode 支持**:适用于多语言环境 #### 注意事项 - 该方法严格区分字母/数字与其他字符(如空格、标点符号) - 空字符串或 `null` 输入会返回 `false`(需额外处理空值) - 大小写字母均被识别为字母 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值