最近准备入其他坑位。在面试过程中,遇到下面这题笔试题,拿出来分享分享。
题目:编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串。但是要保证汉字不被截半个,如“我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 split