截取汉字字符长度问题,如“我们有4个中国人”,java截取后“我们有4个…”,而不会出现乱码。
截取汉字字符长度问题,如“我们有4个中国人”,java截取后“我们有4个…”,
而不会出现乱码。
------解决方案--------------------public static String trancate(String input, int len) {
StringBuffer sb = new StringBuffer(len);
int count = 0;
for (int i = 0; i < input.length(); i++) {
char c = input.charAt(i);
if (c <= '\u00ff ') {
count++;
} else {
count += 2;
if (count > len) {
return sb.append( " ... ").toString().trim();
}
}
sb.append(c);
if (count > = len) {
return sb.append( " ... ").toString().trim();
}
}
return input;
}
input 需要截取的字符串,len 被截取后的长度,一个汉字算 2 个长度。
------解决方案--------------------编程:编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串。 但是要保证汉字不被截半个,如“我ABC”4,应该截为“我AB”,输入“我ABC汉DEF”,6,应该输出为“我ABC”而不是“我ABC+汉的半个”。
答:代码如下:
package test;
class SplitString
{
String SplitStr;
int SplitByte;
public SplitString(String str,int bytes)
{
SplitStr=str;
SplitByte=bytes;
System.out.println( "The String is: ' "+SplitStr+ " ';SplitBytes= "+SplitByte);
}
public void SplitIt()
{
int loopCount;
loopCount=(SplitStr.length()%SplitByte==0)?(SplitStr.length()/SplitByte):(SplitStr.length()/Split
Byte+1);
System.out.println( "Will Split into "+loopCount);
for (int i=1;i <=loopCount ;i++ )
{
if (i==loopCount){
System.out.println(SplitStr.substring((i-1)*SplitByte,SplitStr.length()));
} else {
System.out.println(SplitStr.substring((i-1)*SplitByte,(i*SplitByte)));
}
}
}
public static void main(String[] args)
{
SplitString ss = new SplitString( "test中dd文dsaf中男大3443n中国43中国人
0ewldfls=103 ",4);
ss.SplitIt();
}
}
------解决方案--------------------/**
* 第一个参数,传入的是要截的中英文字符串,第二个参数,要截取的长度。
* @param str
* @param subBytes
* @return str
*/
public String subString(String str, int subBytes) {
int bytes = 0; // 用来存储字符串的总字节数
for (int i = 0; i < str.length(); i++) {
if (bytes == subBytes) {
return str.substring(0, i);}
char c = str.charAt(i);
if (c < 256) {
bytes += 1; // 英文字符的字节数看作1
}else {
bytes += 2; // 中文字符的字节数看作2
if(bytes - subBytes == 1){
return str.substring(0, i);
}
}
}
return str;
}