Java如何从给定字符串中分别提取并打印字母、数字及特殊字符
Java字符串字符分类打印实现方案
需求说明
需实现从输入字符串中分类提取字母、数字、特殊字符并按指定格式打印的功能,给定基准测试信息如下:
- 测试字符串:
str = "aQt4512m@!%n" - 预期输出:
character:aQtmn , Number:4512 special:@!%
原有代码缺陷
原有实现无法正确输出数字和特殊字符,核心问题如下:
- 字符判断逻辑仅覆盖ASCII码65~122区间,未单独区分数字、特殊字符分支,且该区间本身包含
[、]、^等非字母符号,判断逻辑不准确 - 字符收集逻辑仅对命中65~122区间的字符做存储,数字、特殊字符从始至终未被归集
- 逐字符打印+正则替换的逻辑无法实现分类归集后统一按格式输出的要求
正确实现代码
通过遍历字符+类型判断+分类归集的方式实现,逻辑清晰无额外依赖:
public class CharClassification { public static void main(String[] args) { String str = "aQt4512m@!%n"; // 分别定义三类字符的存储缓冲区 StringBuilder letters = new StringBuilder(); StringBuilder numbers = new StringBuilder(); StringBuilder specialChars = new StringBuilder(); // 遍历字符串每个字符做类型判断 for (char c : str.toCharArray()) { if (Character.isLetter(c)) { letters.append(c); } else if (Character.isDigit(c)) { numbers.append(c); } else { specialChars.append(c); } } // 按要求格式拼接输出 System.out.printf("character:%s , Number:%s special:%s%n", letters, numbers, specialChars); } }
如果不希望使用Character类内置的判断方法,也可以直接通过ASCII码区间做判断,替换上述循环中的判断逻辑即可,判断规则:
- 大写字母:
c >= 'A' && c <= 'Z' - 小写字母:
c >= 'a' && c <= 'z' - 数字:
c >= '0' && c <= '9' - 其余字符统一归为特殊字符
运行验证
运行上述代码,控制台输出与预期完全一致:
character:aQtmn , Number:4512 special:@!%
内容的提问来源于stack exchange,提问作者Ash28
相关产品推荐
相关产品推荐

