之前面试面试题上有这样一个题目,当时没给答上来,回来之后自己写了一下
原题是这样的:写一个字符串截取的方法,参数一个字符串和截取长度,要求汉字按两个字节返回,如“大大1111小”,当截取长度为5时返回“大大1”,当截取长度为3时,至返回“大”,不能返回乱码
代码如下:
public static String subStrByChar(String str , Integer index)
{
if (null == str || "".equals(str))
return null;
byte[] strByte = str.getBytes();
//先获取截取的字节出的取值
byte b = strByte[index-1];
Integer realIndex = index;//要截取的真实字节数
//如果为- 表示该字节表示中文的一部分
if (b < 0)
{
//判断前一个字节是否为-如果不是后退一位截取
int loop =0;
for (int i=index-1;i>=0;i--)
{
if (strByte[i] > 0)
break;
loop ++;
}
if (loop%2 != 0)
realIndex = index -1;
}
byte[] realByte = new byte[realIndex];
System.arraycopy(strByte, 0, realByte, 0, realIndex);
String subEndStr = new String(realByte);
return subEndStr;
}