- package com.itheima;
- import java.io.IOException;
- import java.util.Scanner;
- /**
- * 第10题:编写函数,从一个字符串中按字节数截取一部分,但不能截取出半个中文(GBK码表),
- * 例如:从“HM程序员”中截取2个字节是“HM”,截取4个则是“HM程”,截取3个字节也要是"HM"而不要出现半个中
- * */
- public class Test10 {
- public static void main(String[] args) {
- Scanner input = new Scanner(System.in);
- while(true){ /循环的时候跳过了输入字符串直接到了输入字节数那步?
-
- System.out.println("请输入一串字符:");
- String str = input.nextLine();
- System.out.println("请输入截取的字节个数(非0非负数的整数):");
- int count = input.nextInt();
- if ("".equals(str) || count <= 0) {
- System.out.println("请输入正确参数!");
- continue;
- }
- else {
- try {
- String cutstr = splitstr(str, count); // 调用方法截取后
- System.out.println("截取前:" + str + "\n截取后:" + cutstr);
- } catch (IOException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- }
- }
- }
- public static String splitstr(String str, int count) throws IOException {
- // 定义截取之后的字符串
- String cutstr = str.substring(0, count > str.length() ? str.length()
- : count);
- int leng = cutstr.getBytes("GBK").length; // 获取截取之后字符串的长度
- while (leng > count) // 如果截取之后的长度比所要求的长度大的话说明有汉字
- {
- int cutLen = --count; // 一个汉字占2个字节
- cutstr = str.substring(0, cutLen > str.length() ? str.length()
- : cutLen);
- leng = cutstr.getBytes("GBK").length;
- }
- return cutstr;
- }
- }
复制代码 虽然能够处理题目上的例子但是还是有些问题的。
问题:1.第一次以后循环的时候跳过输入字符串,直接要求输入字节数了?
PS:为什么会出现这个情况,有什么好的解决方案?
2.如果输入的都是汉字的话,比如输入:是是是 字节数为:2 的话结果是空的
debug的时候发现截取的时候其实是截取了2个汉字也就是4个字节所以最后判断有汉字的方式是有问题的
在这里与大家交流交流一下,希望大家多多指教
|
|