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

一个面试题:

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

相关文章

来自专栏云霄雨霁

查找----基于散列表(拉链法)

2100
来自专栏lulianqi

支持各种特殊字符的 CSV 解析类 (.net 实现)(C#读写CSV文件)

csv(Comma Separated Values)逗号分隔值,有时也称为字符分隔值,因为分隔字符也可以不是逗号),其文件以纯文本形式存储表格数据(数字和文本...

632
来自专栏Java帮帮-微信公众号-技术文章全总结

第十五天 常用API-object&string&stringbuilder&stringbuffer【悟空教程】

第十五天 常用API-object&string&stringbuilder&stringbuffer【悟空教程】

961
来自专栏xingoo, 一个梦想做发明家的程序员

Ruby编程实践

命令 常量大写 类名和模块名首字母大写,驼峰法,MyClass,Person 方法名小写,ruby中末尾添加符号特殊含义:destroyMethod!表示这个方...

1889
来自专栏一“技”之长

Swift讲解专题十一——属性 原

        属性将值与类,结构体,枚举进行关联。Swift中的属性分为存储属性和计算属性两种,存储属性用于存储一个值,其只能用于类与结构体,计算属性用于计算...

793
来自专栏尾尾部落

[剑指offer] 字符流中第一个不重复的字符

请实现一个函数用来找出字符流中第一个只出现一次的字符。例如,当从字符流中只读出前两个字符”go”时,第一个只出现一次的字符是”g”。当从该字符流中读出前六个字符...

712
来自专栏一个会写诗的程序员的博客

《Kotin 极简教程》第8章 函数式编程(FP)(2)

好了亲,前文中我们在函数式编程的世界里遨游了一番,现在我们把思绪收回来,放到在Kotlin中的函数式编程中来。

692
来自专栏cs

c#知识点2.0 语句

主要说一下我认为比较重要的东西。 foreach循环 格式: foreach(类型 循环变量 in 变量的取值集合) 变量值集合类型必须是一个集合,而循环变...

3396
来自专栏进击的君君的前端之路

对象、原型

1524
来自专栏java达人

java lambda表达式

作者:Jakob Jenkov 译者:java达人 来源:http://tutorials.jenkov.com/java/lambda-expressio...

1875

扫码关注云+社区