您的位置:首页 > 其它

一个可以截取包含中英文的字符串的函数

2014-02-11 21:22 239 查看
保证汉字不被截半个,如"我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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐