您的位置:首页 > 手游攻略 > Java分割中英文,并且中文不能分割一半?

Java分割中英文,并且中文不能分割一半?

作者:互联网  时间: 2026-08-14 07:59:15  

最近准备入其他坑位。在面试过程中,遇到下面这题笔试题,拿出来分享分享。

Java分割中英文,并且中文不能分割一半?

题目: 编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串。但是要保证汉字不被截半个,如“我ABC”4,应该截为“我AB”,输入“我ABC汉DEF”,6,应该输出为“我ABC”而不是“我ABC 汉的半个”。

思路: 每个文件编码格式不一致,如UTF-8、GBK等。其中,UTF-8 中文用三个字节表示,GBK 中文用两个字节表示。并且中文的字节是负数的。可以根据这个原理,把字符串转化为字节数组,判断最后字符是否为中文。如果是英文,则直接分割返回。否则,循环遍历字节数组,并作相应的负数统计并进行求模。

代码实现:

package com.geshanzsq;import java.io.UnsupportedEncodingException;/** * @author geshanzsq*/public class SubString {public static void main(String[] args) throws UnsupportedEncodingException {String srcStr1 = "我ABC";String srcStr2 = "我ABC汉的DEF";splitString(srcStr1, 4);splitString(srcStr2, 6);}public static void splitString(String str,int size) throws UnsupportedEncodingException {//判断是否为空if(str==null){System.out.println("splitString is null");return;}//判断分割位置是否小于等于0if(size<=0){System.out.println("截取字节长度必须大于0");return;}//默认UTF-8 中文一般三个字节表示,gbk两个字节,UTF-8变化就是%3,gbk变化就是;yte[] bytes = str.getBytes("gbk");//如果截取长度大于bytes长度,则直接打印字符串if(size >= bytes.length){System.out.println("splitString=" str);return ;}//如果是中文,bytes为负数。最后一个不是中文,则直接分割if(bytes[size-1] > 0){String splitString = new String(bytes,0,size,"gbk");System.out.println("splitString=" splitString);return;}//字节负数统计并进行求模int num = 0;//循环到需要分割的长度,后面的不需要for(int i = 0 ; i < size; i   ){if(bytes[i]<0){num  ;num = num % 2;}}String splitString = new String(bytes,0,size-num,"gbk");System.out.println("splitString=" splitString);}}

运行结果:

splitString=我ABsplitString=我ABC

最新游戏

更多

Copyright©2010-2019. All rights reserved | 波波三国游戏官网|[email protected]

备案编号:湘ICP备2022015115号-4