为了计算一段文字的长度,其中汉字、英文单词和代码运算符各计为1个长度,可以通过扩展正则表达式来匹配这三类元素。以下是Java实现:
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class TextLengthCalculator {
public static int calculateLength(String text) {
// 正则表达式匹配:汉字 | 英文单词 | 单个符号(非空白、非汉字、非字母)
String regex = "[\\u4e00-\\u9fa5]|[a-zA-Z]+|[^\\s\\u4e00-\\u9fa5a-zA-Z]";
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(text);
int count = 0;
while (matcher.find()) {
count++;
}
return count;
}
public static void main(String[] args) {
// 测试用例
String test1 = "a+=b";
System.out.println(calculateLength(test1)); // 输出4(a, +, =, b)
String test2 = "int a=5+3; //注释";
System.out.println(calculateLength(test2)); // 输出11(int, a, =, 5, +, 3, ;, /, /, 注, 释)
String test3 = "你好hello!";
System.out.println(calculateLength(test3)); // 输出4(你, 好, hello, !)
}
}
实现说明
-
正则表达式拆解:
[\\u4e00-\\u9fa5]
:匹配单个汉字。[a-zA-Z]+
:匹配连续的英文字母(即英文单词)。[^\\s\\u4e00-\\u9fa5a-zA-Z]
:匹配任何非空白、非汉字、非英文字母的字符(即代码运算符或符号)。
-
匹配规则:
- 英文单词和汉字优先匹配,符号逐个匹配。
- 例如
a+=b
会被分解为a
(单词)、+
(符号)、=
(符号)、b
(单词),总长度为4。
-
特殊符号处理:
- 连续符号(如
++
)会被拆分为两个独立符号,各计1个长度。 - 数字、括号、分号等非字母/汉字的字符均视为符号,单独计数。
- 连续符号(如
示例结果
a+=b
→ 4(1单词 + 2符号 + 1单词)int a=5+3; //注释
→ 11(2单词 + 5符号 + 2汉字 + 2符号)你好hello!
→ 4(2汉字 + 1单词 + 1符号)
此方法能准确处理中英文混合文本、代码运算符及符号,满足复杂场景需求。