【每天算法4】编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串。

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

 

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

 

明天周末了!没准有没有时间写了。明天的题目明天再找吧!希望有时间。

你可能感兴趣的:(exception,算法,String,null,byte,encoding)