这个程序是用于按字节划分字符串,因为汉字占2个字节,而字母数字只占一个字节,因此要考虑汉字的划分问题,不能把汉字给拆了。
程序最主要是用了正则表达式(Regular Expression)Regex。String m = "[\u4e00-\u9fa5]";
汉字在Unicode中的编码占据4e00-9fa5的部分。
import java.util.Scanner;
//按字节截取字符串,还要保证汉字不被截取为半个,汉字占2个字节,而字母占1个字节
public class InterceptStr {
static String ss; // 要截取的string
static int n; // 截取的字节个数
public static void main(String[] args) {
System.out.println("请输入字符串:");
Scanner inputStr = new Scanner(System.in);
ss = inputStr.next();
System.out.println("请输入要划分字节数:");
Scanner inputInt = new Scanner(System.in);
n = inputInt.nextInt();
interception(setValue());
}
private static void interception(String[] string) {
int count = 0;
String m = "[\u4e00-\u9fa5]"; // 汉字的正则表达式
System.out.println("以每" + n + "字节划分的字符串如下所示:");
for (int i = 0; i < string.length; i++) {
if (string[i].matches(m)) { // 将字符串数组中的每个元素与regex匹配
count += 2; // 是汉字
} else
count++;
if (count < n)
System.out.print(string[i]);
else if (count == n) {
System.out.print(string[i]);
count = 0;
System.out.println();
} else {
count = 0;
System.out.println();
}
}
}
// 将字符串转换为字符串数组
private static String[] setValue() {
String[] string = new String[ss.length()];
for (int i = 0; i < ss.length(); i++)
string[i] = ss.substring(i, i + 1);
return string;
}
}
运行结果:
请输入字符串:
2011年12月7日天气晴星期5
请输入要划分字节数:
3
以每3字节划分的字符串如下所示:
201
1年
12
7日
天
晴
期5
本文介绍了一种使用Java实现的按字节划分字符串的方法,特别考虑了汉字的完整性和编码特性。通过正则表达式识别汉字并确保其不会被拆分。
1880

被折叠的 条评论
为什么被折叠?



