在Java开发中,处理包含汉字的字符串是常见需求。本文将详细介绍如何将字符串中的汉字提取到数组中,并提供多种实现方法。
public static String[] extractChineseCharacters(String str) {
// 匹配所有Unicode汉字
String regex = "[\\u4e00-\\u9fa5]";
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(str);
List chineseChars = new ArrayList<>();
while(matcher.find()) {
chineseChars.add(matcher.group());
}
return chineseChars.toArray(new String[0]);
}
public static String[] getChineseCharacters(String input) {
List result = new ArrayList<>();
for(int i = 0; i < input.length(); i++) {
char c = input.charAt(i);
// 判断是否是汉字
if(Character.toString(c).matches("[\\u4e00-\\u9fa5]")) {
result.add(Character.toString(c));
}
}
return result.toArray(new String[0]);
}
public static String[] extractChineseWithStream(String str) {
return str.chars()
.filter(c -> String.valueOf((char)c).matches("[\\u4e00-\\u9fa5]"))
.mapToObj(c -> String.valueOf((char)c))
.toArray(String[]::new);
}
1. 对于短字符串,三种方法性能差异不大
2. 长字符串处理建议使用方法一(正则表达式)
3. Java 8及以上版本推荐使用Stream API实现
A1: 可以通过Unicode范围判断,汉字的Unicode编码范围是\u4e00-\u9fa5。
A2: 上述方法可以处理基本汉字,但可能不包括一些特殊汉字或扩展汉字集。
A3: 对于大文本,建议使用方法一,并考虑使用StringBuilder优化字符串处理。