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

来源:互联网 发布:网络系统培训 编辑:程序博客网 时间:2024/04/27 23:17

保证汉字不被截半个,如"我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

0 0