输入"我abc"输出4个字节的字符串

来源:互联网 发布:php代码在线测试 编辑:程序博客网 时间:2024/05/21 10:10

目: 编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串。   但是要保证汉字不被截半个,如“我ABC”4,应该截为“我AB”,输入“我ABC汉DEF”,6,应该输出为“我ABC”而不是“我ABC+汉的半个”。

  1. package com.sw.suanfa.first.ten;  
  2. /** 
  3.  * 编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串。   
  4.  *  但是要保证汉字不被截半个, 
  5.  *  如“我ABC”4,应该截为“我AB”, 
  6.  *  输入“我ABC汉DEF”,6,应该输出为“我ABC”而不是“我ABC+汉的半个”。  
  7.  * 
  8.  *我的处理方式:截取字符串的一个字符,加入StringBuffer中,并取其字节数,并入当前获取字符的总长度中, 
  9.  *如果总长度大于等于输入的长度,则返回StringBuffer的toString值。 
  10.  *getSubString方法传入encoding值。UTF-8中文占3个字节,GBK占2个。结果有所不同,所以还是传入较好。 
  11.  *没有通过判断charAt的值来判定是否为中文等特殊字符。 
  12.  */ 
    <!--

    Code highlighting produced by Actipro CodeHighlighter (freeware)
    http://www.CodeHighlighter.com/

    --> public class SubStringWithChina {  
            
    public static void main(String[] args) throws Exception{  
                  
                String a 
    = "我ABC汉DEF" ;  
                
    int len = 6 ;  
                String encoding 
    = "UTF-8" ;  
                  
                System.out.println( getSubString(a, len,encoding) );  
                a 
    = "我ABC";  
                len 
    = 4 ;  
                encoding 
    = "gbk" ;  
                System.out.println( getSubString(a, len,encoding) );  
            }  
              
            
    /** 
             *  
             * 
    @param str 传入字符串 
             * 
    @param len 截取字节数 
             * 
    @param encoding 编码方式 
             * 
    @return 返回截取后的字符串 
             * 
    @throws Exception 
             
    */  
            
    public static String getSubString(String str,int len,String encoding) throws Exception{  
                
    if(str == null || str.length()<1return null ;  
                
    if(len<1return null ;  
                StringBuffer sb 
    = new StringBuffer();  
                
    int all = 0 ;  
                
    for(int i=0;i<str.length();i++){  
                    String tmp 
    = str.substring(i,i+1);  
                    sb.append(tmp);  
                    
    byte[] tmpB = tmp.getBytes(encoding);  
                    all 
    +=tmpB.length ;  
                    
    if(all>=len){  
                        
    break ;  
                    }  
                }  
                
    return sb.toString() ;  
            }  
        }
原创粉丝点击