昨天做了个很小的练习题,需要实现的功能是截取含有汉字的字符串,java是采用unicode的编码格式,所以一个汉字是占用两个字节空间.需要实现的功能是,假如有个字符串是"你好你好",需要截取长度是4,则截取结果是"你好",如果字符串是"你好A你好",需要截取长度是6,则不截取最后一个汉字"你",截取结果是"你好A".我个人用了个比较土的方法,网上有人是用正则表达式来匹配.
源码如下:
public
class TestSplitString {
/**
* @param args
*/
public static void main(String[] args) {
String str = "你好啊";
int a = 2;
System.out.println(splitString(str, a));
str = "你很a好";
a = 6;
System.out.println(splitString(str, a));
str = "abcdefg";
a = 7;
System.out.println(splitString(str, a));
}
private static String splitString(String str, int a) {
if (str != null && str.trim().length() > 0 && a > 0) {
// 取得该字符串的字节长度
int length = str.getBytes().length;
// 全部不包括汉字
if (str.length() == length) {
// 如果截取长度是字符串长度以内,就substring,否则就取这个字符串
if (a < str.length()) {
return str.substring(0, a);
} else {
return str;
}
} // 含有汉字
else {
StringBuffer sb = new StringBuffer();
// 截取算法 遍历字符串,并且监测a值
for ( int i = 0; i < str.length() && a > 0; i++) {
// 如果是汉字算2个长度。
if (str.charAt(i) >= '\u4E00' && str.charAt(i) <= '\u9FA5') {
// 如果是汉字且不是最后一个字符,就加上,否则不加
if (a > 1) {
sb.append(str.charAt(i));
a -= 2;
}
// 不是汉字只算一个长度
} else {
sb.append(str.charAt(i));
a--;
}
}
return sb.toString();
}
}
return "输入有误";
}
}
/**
* @param args
*/
public static void main(String[] args) {
String str = "你好啊";
int a = 2;
System.out.println(splitString(str, a));
str = "你很a好";
a = 6;
System.out.println(splitString(str, a));
str = "abcdefg";
a = 7;
System.out.println(splitString(str, a));
}
private static String splitString(String str, int a) {
if (str != null && str.trim().length() > 0 && a > 0) {
// 取得该字符串的字节长度
int length = str.getBytes().length;
// 全部不包括汉字
if (str.length() == length) {
// 如果截取长度是字符串长度以内,就substring,否则就取这个字符串
if (a < str.length()) {
return str.substring(0, a);
} else {
return str;
}
} // 含有汉字
else {
StringBuffer sb = new StringBuffer();
// 截取算法 遍历字符串,并且监测a值
for ( int i = 0; i < str.length() && a > 0; i++) {
// 如果是汉字算2个长度。
if (str.charAt(i) >= '\u4E00' && str.charAt(i) <= '\u9FA5') {
// 如果是汉字且不是最后一个字符,就加上,否则不加
if (a > 1) {
sb.append(str.charAt(i));
a -= 2;
}
// 不是汉字只算一个长度
} else {
sb.append(str.charAt(i));
a--;
}
}
return sb.toString();
}
}
return "输入有误";
}
}
这里就是在JAVA中汉字是在'\u4E00'和'\9FA5'之间.请高手斧正.
转载于:https://blog.51cto.com/pengchang/371863