纪录下。 编程:编写一个截取字符串的函数,输入一个字符串和字节数,输出按字节书截取的字符串,但是要保证汉字不能截半个,,如“我ABC”,4 应该截取“我AB”,输入“我ABC汉DEF”,6 然后输出“我ABC”,而不是半个汗字; import java.util.regex.Pattern; public class TestPro { //匹配中文 static final String regEx = "[/u4e00-/u9fa5]"; public static void main(String[] args) { String str = "aa我asdf是aaa真够aasdfadfsf"; int n = 1; System.out.println(regex(n, str)); } /** * 用来匹配的 * @param n 匹配长度 * @param str 匹配字符串 */ protected static String regex(int n, String str) { int length = getLength(str); if (n > length) { return "too long"; } if (n == length) { return str; } if (length == 1) { return str; } if (n == 1) { if (Pattern.compile(regEx).matcher(str.substring(0, n)).find()) { return "this is chinese , so not found"; } else { return str.substring(0, n); } } return check(n, str); } /** * 获取字符串的长度 * @param str 字符串 * @return 返回长度 */ private static int getLength(String str) { if (str.length() == 0) { return 0; } int count = 1; for (int i = 0; i < str.length() - 1; i++) { if (Pattern.compile(regEx).matcher(str.substring(i, i + 1)).find()) { count += 2;//中文加2 } else { count++; } } return count; } /** * 截取数据 * @param n 长度 * @param str 字符串 */ private static String check(int n, String str) { String[] strArr = str.split(""); StringBuffer sb = new StringBuffer(); boolean b = false; //是否是中文 int count = 0;//长度计算 for (int i = 0; i < str.length(); i++,count++) { b = false; if (Pattern.compile(regEx).matcher(strArr[i]).find()) { //当要截取的长度和长度计算相隔1时,又是中文,应该不存储这个中文 if ((n - count) < 1) { break; } b = true; } sb.append(strArr[i]); if (b) { count++;//中文长度计算加1 } if(count == n){ break; //截取到指定长度 } } return sb.toString(); } }