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