这个程序是用于按字节划分字符串,因为汉字占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