“编程:编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节数
但是要保证汉字不被截半个,如“我ABC”4,应该截为“我AB”,输入“我ABC汉DEF”,6,应该输出为“我ABC”而不是“我ABC+汉的半个”。 ” String subString(String str, int i) {
String strReturn = "";
if (str.equals("") || str == null || i == 0) {
return "";
}
for (int j = 1; j <= str.length(); j++) {
String temp = "";
temp = str.substring(0, j);
if (temp.getBytes().length >= i) {
if (temp.substring(j - 1, j).getBytes().length == 1) {
strReturn = temp;
}
else {
strReturn = str.substring(0, j - 1);
} break;
} } return strReturn;
}这里干嘛要用一个for 循环,取子串直接用个temp变量不就行了吗,干嘛要用一个for循环,而且if (temp.substring(j - 1, j).getBytes().length == 1)怎么就能确保是汉字呢?难道取j-1到j的子串,如果是汉字,该子串的字节长度就不是1?那是什么?
但是要保证汉字不被截半个,如“我ABC”4,应该截为“我AB”,输入“我ABC汉DEF”,6,应该输出为“我ABC”而不是“我ABC+汉的半个”。 ” String subString(String str, int i) {
String strReturn = "";
if (str.equals("") || str == null || i == 0) {
return "";
}
for (int j = 1; j <= str.length(); j++) {
String temp = "";
temp = str.substring(0, j);
if (temp.getBytes().length >= i) {
if (temp.substring(j - 1, j).getBytes().length == 1) {
strReturn = temp;
}
else {
strReturn = str.substring(0, j - 1);
} break;
} } return strReturn;
}这里干嘛要用一个for 循环,取子串直接用个temp变量不就行了吗,干嘛要用一个for循环,而且if (temp.substring(j - 1, j).getBytes().length == 1)怎么就能确保是汉字呢?难道取j-1到j的子串,如果是汉字,该子串的字节长度就不是1?那是什么?
string.getbytes()是按byte计算的,搞清楚这个应该就能看懂了
for循环是为了保证byte数不超过要求
一个汉字的getbytes().length==2
{
public static void main(String[] args) throws Exception
{
if(args.length<2)
{
System.out.println("java MySubString abc 2");
return;
}
char[] buf=args[0].toCharArray();
int num=Integer.parseInt(args[1]);
String re="";
for(int i=0,j=0;i<buf.length&&j<num;i++)
{
if(buf[i]>=0177)
{
if(j+2>num)break;
re+=buf[i];
j+=2;
}
else {re+=buf[i];j++;}
}
System.out.println("结果是:"+re);
}
}