je上看到笔试题:
http://wangyu.iteye.com/blog/190753
7、编程:编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串。
但是要保证汉字不被截半个,如"我ABC"4,应该截为"我AB",输入"我ABC汉DEF",6,
应该输出为"我ABC"而不是"我ABC+汉的半个"。
不过作者给出的答案是错误的:
答:代码如下:
package test;
class SplitString
{
String SplitStr;
int SplitByte;
public SplitString(String str,int bytes)
{
SplitStr=str;
SplitByte=bytes;
System.out.println("The String is:′"+SplitStr+"′;SplitBytes="+SplitByte);
}
public void SplitIt()
{
int loopCount;
loopCount=(SplitStr.length()%SplitByte==0)?(SplitStr.length()/SplitByte):(SplitStr.length()/Split
Byte+1);
System.out.println("Will Split into "+loopCount);
for (int i=1;i<=loopCount ;i++ )
{
if (i==loopCount){
System.out.println(SplitStr.substring((i-1)*SplitByte,SplitStr.length()));
} else {
System.out.println(SplitStr.substring((i-1)*SplitByte,(i*SplitByte)));
}
}
}
public static void main(String[] args)
{
SplitString ss = new SplitString("test中dd文dsaf中男大3443n中国43中国人0ewldfls=103",4);
ss.SplitIt();
}
}
我这里给他纠正一下,代码如下:
//package com.liany.demo.cutstring;
/**
* 按字节数来截取字符串,遇到汉字要整个字截取,不能只截取一半
* @author liany
* 2012-04-20
*/
public class CutString {
/**
* @param args
*/
public static void main(String[] args) {
String str = "1我45人有的";
System.out.println(cutString(str, 1));
System.out.println(cutString(str, 2));
System.out.println(cutString(str, 3));
System.out.println(cutString(str, 4));
System.out.println(cutString(str, 5));
System.out.println(cutString(str, 6));
System.out.println(cutString(str, 7));
System.out.println(cutString(str, 8));
}
/**
* 按字节数来截取字符串,遇到汉字要整个字截取,不能只截取一半
* @param str 原始字符串
* @param bytes 要截取的字节数
*/
public static String cutString(String str, int bytes){
int i = 0; //字符串序号
int count = 0; //累计字节数
while(count < bytes){
byte[] b = (str.charAt(i++)+"").getBytes();
count += b.length;
}
return str.substring(0, i);
}
}
截取的结果是:
1
1我
1我
1我4
1我45
1我45人
1我45人
1我45人有