Java---练习(面试题) :字符串截取(1)

简介: Java---练习(面试题) :字符串截取(1)

在java中,字符串“abcd”与字符串“ab你好”的长度是一样,都是四个字符。

但对应的字节数不同,一个汉字占两个字节。

定义一个方法,按照指定的字节数来取子串。

如:对于“ab你好”,如果取三个字节,那么子串就是ab与“你”字的半个,那么半个就要舍弃。如果取四个字节就是“ab你”,取五个字节还是“ab你”。


上面给出的是在gbk编码下的截取字符串。

下面我写了个代码,可以在utf-8和gbk编码下都能截取字符串。


注意:utf-8下的绝大多数汉字都是3个字节,所以,为了简化,全部当成了3个字节处理。

package io.string;
import java.io.IOException;
import java.util.Scanner;
public class StringCutOut {
    static final String STR = "汗";
    public static void main(String[] args) throws IOException {
        Scanner sc = new Scanner(System.in);
        // 只考虑GBK和UTF-8
        while (true) {
            if (STR.getBytes().length % 2 == 0) {// GBK
                System.out.println("请输入字符串:(输入'#'结束为结束程序)");
                String str = sc.next();
                if ("#".equals(str)) {
                    return;
                }
                System.out.println("请输入指定字节以用来截取字符串(截取的字符串的字串每个占一行):");
                int n = sc.nextInt();
                int len = 0;
                int m = n;
                while (len < str.length()) {
                    if (str.charAt(len) >= 0 && str.charAt(len) <= 128) {
                        n--;
                        System.out.print(str.charAt(len));
                        if (n <= 0) {
                            n = m;
                            System.out.println();
                        }
                        len++;
                    } else {
                        n -= 2;
                        System.out.print(str.charAt(len));
                        if (n  <= 0) {
                            n = m;
                            System.out.println();
                        }
                        len++;
                    }
                }
                System.out.println();
            } else if (STR.getBytes().length % 2 != 0) {// utf-8
                System.out.println("请输入字符串:(输入'#'结束为结束程序)");
                String str = sc.next();
                if ("#".equals(str)) {
                    return;
                }
                str = new String(str.getBytes("gbk"), "UTF-8");
                //因为我的终端输入默认是gbk的,改了系统的编码还是没用。所以就用这个转码了。。
                //这里肯定是有bug的----留待下次编辑修复
                // System.out.println(str);
                // System.out.println(str.length());
                System.out.println("请输入指定字节以用来截取字符串(截取的字符串的字串每个占一行):");
                int n = sc.nextInt();
                int len = 0;
                int m = n;
                while (len < str.length()) {
                    if (str.charAt(len) >= 0 && str.charAt(len) <= 128) {
                        n--;
                        System.out.print(str.charAt(len));
                        len++;
                        if (n <= 0) {
                            n = m;
                            System.out.println();
                        }
                    } else {
                        if(n-2<=0&&m>=3){
                            n=m;
                            System.out.println();
                            continue;
                        }
                        n -= 3;
                        System.out.print(str.charAt(len));
                        if(n<=0){
                            n=m;
                            System.out.println();
                        }
                        len++;
                    }
                }
            }
            System.out.println();
        }
    }
}

GBK编码下的一个测试结果:


请输入字符串:(输入'#'结束为结束程序)

ab你好
请输入指定字节以用来截取字符串(截取的字符串的字串每个占一行):
4
ab你


UTF-8下的一个测试结果:


请输入字符串:(输入'#'结束为结束程序)

ab你好

请输入指定字节以用来截取字符串(截取的字符串的字串每个占一行):

4
ab


目录
相关文章
|
15天前
|
Java
Java 字符串分割split空字符串丢失解决方案
Java 字符串分割split空字符串丢失解决方案
|
26天前
|
Java 程序员
java线程池讲解面试
java线程池讲解面试
49 1
|
5天前
|
XML 缓存 Java
Java大厂面试题
Java大厂面试题
18 0
|
5天前
|
存储 安全 Java
Java大厂面试题
Java大厂面试题
11 0
|
5天前
|
存储 安全 Java
Java大厂面试题
Java大厂面试题
13 0
|
6天前
|
安全 Java
就只说 3 个 Java 面试题 —— 02
就只说 3 个 Java 面试题 —— 02
19 0
|
6天前
|
存储 安全 Java
就只说 3 个 Java 面试题
就只说 3 个 Java 面试题
10 0
|
16天前
|
Java 关系型数据库 MySQL
大厂面试题详解:Java抽象类与接口的概念及区别
字节跳动大厂面试题详解:Java抽象类与接口的概念及区别
40 0
|
17天前
|
Java
Java练习题-键盘录入字符串实现大小写转换
Java练习题-键盘录入字符串实现大小写转换
20 2
|
18天前
|
存储 安全 Java
Java中实现高效的字符串拼接技术
【4月更文挑战第6天】在Java编程中,字符串拼接是一个常见的操作。然而,由于字符串的不可变性,频繁的拼接操作可能会导致性能问题。本文将探讨Java中实现高效字符串拼接的技术,包括使用StringBuilder类、StringBuffer类以及Java 8中的StringJoiner类。通过对比这些技术的优缺点,我们将为您提供在不同场景下选择合适的字符串拼接方法的建议。