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

一个面试题:

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

相关文章

来自专栏菜鸟前端工程师

JavaScript学习笔记005-运算符

642
来自专栏蓝天

带有通配符的字符串匹配算法-C/C++

日前某君给我出了这样一道题目:两个字符串,一个是普通字符串,另一个含有*和?通配符,*代表零个到多个任意字符,?代表一个任意字符,通配符可能多次出现。写一个算法...

1283
来自专栏python学习指南

python切片

本篇将介绍Python的切片操作,切片支持的数据类型有列表、字符串、元祖,更多内容请参考:Python学习指南 切片是什么? 切片操作符是序列名后跟一个方...

1947
来自专栏前端知识分享

js保留两位小数方法总结

  最近在做结算系统,经常需要用到金额保留两位小数,刚开始我一直用的是Angular中的过滤器number |2,但是,这无法满足我的需求。问题是,当用户离开文...

601
来自专栏python学习之旅

Python笔记(九):字符串操作

(一)    字符串 单引号、双引号、三重引号都可以作为字符串的开始和结束,三重引号可以直接输入多行字符串。三重引号可能一般是用来写多行注释。 ? (二)   ...

3657
来自专栏java系列博客

ORACLE

1984
来自专栏小白的技术客栈

Python内置数据结构大总结

内置据结构大总结 今天不讲解新的内容,主要回顾一下以往讲过的内置数据结构,来个大总结。 ? 五种线性结构 列表 元组 字符串 bytes bytearray ...

3227
来自专栏企鹅号快讯

LeetCode小白菜笔记2:Reverse Integer

LeetCode小白菜笔记[2]:Reverse Integer7. Reverse Integer [Easy] 题目: Given a 32-bit sig...

2039
来自专栏ml

c语言格式大整理

1、C语言中,非零值为真,真用1表示;零值为假,假用0表示。 2、转义字符参考: \a 蜂鸣,响铃  \b 回退:向后退一格 ...

3107
来自专栏程序员宝库

精心收集的 48 个 JavaScript 代码片段,仅需 30 秒就可理解

该项目来自于 Github 用户 Chalarangelo,目前已在 Github 上获得了 5000 多Star,精心收集了多达 48 个有用的 JavaSc...

34612

扫码关注云+社区