62,614
社区成员
发帖
与我相关
我的任务
分享
//思路是长度以汉字为准,一个汉字按2算,1个半角字符按1算,都向汉字看起。
//考虑到中英文混用的情况,所以一个字符一个字符拿出来看
//参数lengthAssigned被看做是汉字的个数。
//用totalLeng来记数。
public static String SubStr(String title,int lengthAssigned){
int leng=2*lengthAssigned;
int index=0,totalLeng=0;
boolean hasChinese=false;
while(index<title.length()){
if(title.charAt(index)<256){
totalLeng++;
}else{
totalLeng+=2;
hasChinese=true;
}
if(totalLeng-leng>=0){
break;
}
index++;
}
if(hasChinese){ //如果前面的字符中包含有全角字符,则直接截取字符串。
return index==0?"":title.substring(0,index+1);
}
//在规定长度之内全是半角字符时的处理:
//
if(index==0){
return "";
}
int indexOfSpace=title.lastIndexOf(" ",index+1);
if(indexOfSpace<0){
return title.substring(0,index+1);
}
return title.substring(0,indexOfSpace+1);
}
public static String subString(String str, int sub) {
if (str != null) {
Pattern pattern = Pattern.compile("[\u4e00-\u9fa5]|[\uFF00-\uFFEF]", Pattern.CASE_INSENSITIVE | Pattern.DOTALL);
Matcher m = pattern.matcher(str);
if (m.find()) {
//中文
if (str.length() <= sub) {
return str;
}
System.out.print("中文: ");
str = str.substring(0, sub) + "...";
return str;
} else {
System.out.print("英文: ");
sub *= 2;
if (str.length() <= sub) {
return str;
}
String str1 = str.substring(0, sub);
String str2 = str.substring(sub, str.length());
int a = str1.substring(str1.lastIndexOf(" "), str1.length()).length();
int b = str2.substring(0, str2.indexOf(" ")).length();
str = a >= b ? str.substring(0, sub + b) : str.substring(0, sub - a);
return str + "...";
}
}
return null;
}
public static void main(String[] args) {
String str = "如果一个人轻轻走过,你是否被他的清风带动";
System.out.println(subString(str, 10));
str = "if a man came by with you lightly, whether you would be reflected by him ";
System.out.println(subString(str, 10));
}