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

一个面试题:

编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串。 但 是要保证汉字不被截半个,如“我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);

		}
	}
}

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏北京马哥教育

Python2.x与3​​.x版本区别

? 文 | 豌豆 来源 | 菜鸟教程 Python的3.0版本,常被称为Python 3000,或简称Py3k。相对于Python的早期版本,这是一个较...

3276
来自专栏SeanCheney的专栏

Python题目

简述函数式编程 在函数式编程中,函数是基本单位,变量只是一个名称,而不是一个存储单元。除了匿名函数外,Python还使用fliter(),map(),red...

41816
来自专栏iOS技术杂谈

iOS @property探究(一): 基础详解你要知道的@property都在这里

你要知道的@property都在这里 本文大纲 Apple Adopting Modern Objective-C翻译 @property基本用法 @prope...

4189
来自专栏数据小魔方

左手用R右手Python系列之——数据框与apply向量运算

R语言与Python中的apply函数都有着丰富的应用场景,恰到好处的使用apply函数,可以避免在很多场景下书写冗余的代码,这不仅能提高代码可读性,而且提高代...

60711
来自专栏androidBlog

归并排序 递归版和非递归版的实现(java)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/gdutxiaoxu/article/details/...

2031
来自专栏青玉伏案

窥探Swift之使用Web浏览器编译Swift代码以及Swift中的泛型

   有的小伙伴会问:博主,没有Mac怎么学Swift语言呢,我想学Swift,但前提得买个Mac。非也,非也。如果你想了解或者初步学习Swift语言的话,你可...

1855
来自专栏Python中文社区

Python生成器的使用技巧详解

之前我们介绍了列表解析式,他的优点很多,比如运行速度快、编写简单,但是有一点我们不要忘了,他是一次性生成整个列表。如果整个列表非常大,这对内存也同样会造成很大压...

1203
来自专栏Script Boy (CN-SIMO)

Java之数组篇

动手动脑,第六次Tutorial——数组 这次的Tutorial讲解了Java中如何进行数组操作,包括数组声明创建使用和赋值运算,写这篇文章的目的就是通过实际运...

2530
来自专栏Python绿色通道

Python入门三部曲(二)

如果不确定使用del语句还是pop()方法,有一个简单的标准:如果你要从列表中删除的一个元素,且不再以任何方式使用它,就使用del语句;如果你要在删除元素后还能...

953
来自专栏编程微刊

JS数组去重的6种算法实现以上就是为大家提供的6种JS数组去重的算法实现,希望对大家的学习有所帮助。

1952

扫码关注云+社区