保证汉字不被截半个,如"我ABC"4,应该截为"我AB",输入"我ABC汉DEF",6,应该输出为"我ABC"而不是"我ABC+汉的半个"。
汉字算两个字节,字母算一个字节
public static boolean isLetter(char c) { //可以判断是否为汉字
int k=0X80;
return c/k==0?true:false;
}
public static int lengths(String strSrc){
if (strSrc==null) {
return 0;
}
int len=0;
char[] strChar=strSrc.toCharArray();
for (int i=0;i<strChar.length;i++){
len++;
if (!isLetter(strChar[i])) len++;
}
return len;
}
public static String subString(String origin,int len){
if (origin==null || origin.equals("")|| len<1){
return "";
}
if (len>lengths(origin)){
return origin;
}
byte[] strByte=new byte[len];
System.arraycopy(origin.getBytes(),0,strByte,0,len);
int count=0;
for (int i=0;i<len;i++){
int value=(int)strByte[i];
if (value<0) count++;
}
if (count % 2 !=0){
//len=(len==1)?++len:--len;
--len;
}
return new String(strByte,0,len);
}
public static void main(String[] args) {
System.out.println(""+ subString("我ABC汉DEF",6));
}
另外写啦一个测试isLetter()的方法
public class TestString {
public static boolean isLetter(char c) {
int k=0X80;
System.out.println(c/k);
return c/k==0?true:false;
}
public static void main(String[] args) {
String s="w实得分ws是否ds的a";
for(int i=0;i<s.length();i++){
isLetter(s.toCharArray()[i]);
}
}
}
输出结果为:
0
183
191
164
0
0
204
168
0
0
237
0
只有是汉字时c/k就会大于0