一个面试题:截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串

来源:互联网 发布:360软件助手不见了 编辑:程序博客网 时间:2024/06/04 18:09

一个面试题:

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


提示:(记得第一次做的时候就TM读半天:还是没读懂,这TM什么意思???就没做了,今天复习,然后再看,就懂了什么意思了!

所以乡亲们,第一次都是蛮痛苦的,所以不要自卑,慢慢的就会超神了的!亲, 记住:男人,不能说自己是不行的$_^    believe yourself)


import java.util.Scanner;/** * 编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串。 但 * 是要保证汉字不被截半个,如“我ABC”4,应该截为“我AB”,输入“我ABC汉DEF”,6,应 * 该输出为“我ABC”而不是“我ABC+汉的半个”. */public class Test10 {public static void main(String[] args) {String str = "我ABC汉DEF";System.out.println(str);while(true){System.out.println("请输入要截取字节长度");Scanner input = new Scanner(System.in);int len = input.nextInt();byte[] b = str.getBytes();//遍历一下,看看字符创中各个字节对应的值的正负。//for (int i = 0; i < b.length; i++) {//System.out.println(b[i]);//}//此功能(len=-1)主要用处是否退出循环判断if(len == -1)break;//首先要判断长度是否为0,如果为0,我们直接打印,否则进入if判断if(len != 0){//为什么(len-1)?因为字节的下标是从0开始,而len表示的是字节长度,是 长度 哦!!!if(b[len-1] < 0){//下面的一个循环遍历我们可以看出,如果是汉字的话,那么对应的字节都是负数,为什么呢?半个字你认识吗?不认识吧!这样理解:它什么都不是所以为负数//英文字母只占一个字节,所以读取不会出问题,所以可以正确读取,这里理解:可以正确读取就为正数//此处我们还要判断,到底是汉字的前一半还是后一半呢?如果是前一半就不要,后一半就读汉字。亲,那就看它的下一位不就OK了吗?呵呵if(b[len]<0)//为了满足如果读了一半读的为:?,我要隐藏这个错误怎么办?就读到上一个字节就行了,所以就(len-1),对吧?len = len-1;}}String show = new String(b,0, len);//最后把它打印show出来System.out.println(show);}}}