java中输入的字符串截取问题_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

今天就先到这里了。

本文同步分享在 博客“谙忆”(CSDN)。

如有侵权,请联系 support@oschina.cn 删除。

本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值