黑马程序员技术交流社区
标题:
一个超水准的面试题
[打印本页]
作者:
余志强
时间:
2011-10-1 16:29
标题:
一个超水准的面试题
写一个函数,2个参数,1个字符串,1个字节数,返回截取的字符串,要求字符串中的中文不能出现乱码:如(“我ABC”,4)应该截为“我AB”,输入(“我ABC汉DEF”,6)应该输出为“我ABC”而不是“我ABC+汉的半个”。
作者:
匿名
时间:
2011-10-1 22:52
以前好像做过的,现在想不出来,只记得那时候查文档设置了一下编码
作者:
曾公亮
时间:
2011-10-2 12:32
查找得知汉字占的2个byte都是小于0的,所以这样写了,运行没有错误,可能在执行效率上存在缺陷,不知各位是否有更好的方法!![code=java]public class CutTest {
public static void main(String[] args) throws Exception {
System.out.println(cut("我ABC汉DEF", 2));
}
public static String cut(String str, int num) throws Exception {
byte[] buf = str.getBytes();
String strC = null;
int n = 0;
if (num <= buf.length && num > 0) {
for (int i = num; i < buf.length; i++) {// 从buf的第num+1个值计算n的值
if (buf
> 0) {
// 如果下一个为字母,则跳出循环
break;
}
n++;
}
if (n % 2 == 0) {//当n=0时也执行下面的代码
strC = new String(buf, 0, num);
} else {
strC = new String(buf, 0, num - 1);
}
} else {
strC = "String index out of range!!!";
}
return strC;
}
}[/code]不好意思,更新了好几回,上面应该是从buf的第num+1个值计算n的值,这样保证字母和汉字混合时,截取不出错
[
本帖最后由 曾公亮 于 2011-10-02 13:32 编辑
]
作者:
许晨峰
时间:
2011-10-2 16:25
在String类里面有charAt的方法,可以返回一个字符的ASCII码,可以利用ASCII码来判断此字符是不是一个汉字。[code=java]public class Test {
public static String toString(String str, int sum) {
int temp = 0;
for (int i = 0; i < str.length(); i++) {
if (temp == sum) {
return str.substring(0, i);
}
int ascii = str.charAt(i);
if (ascii < 256) {//ascii码为英文的时候+1
temp += 1;
} else {//否则 +2
temp += 2;
if (temp > sum) {
return str.substring(0, i);
}
}
}
return str;
}
public static void main(String[] args) {
String temp = "我ABC汉DEF";
System.out.println(toString(temp, 6));
}
}[/code]————参考了csdn的一位同学的代码
[
本帖最后由 许晨峰 于 2011-10-03 11:12 编辑
]
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2