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

目: 编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串。   但是要保证汉字不被截半个,如“我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() < 1 return   null  ;  
                
    if (len < 1 return   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() ;  
            }  
        }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值