日期:2014-05-18  浏览次数:20708 次

截取汉字字符长度问题,如“我们有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;
}