截取字符串,含有汉字和字母,不能截半个汉字

时间:2023-01-12 10:55:20
/**
 * 2017年6月19日
 * 
 * 问题描述:
 *       编写一个截取字符串的函数,输入为一个字符串和字节数,
 *       输出为按字节截取的字符串。但是要保证汉字不被截半个,
 *       如"我ABC"4,应该截为"我AB",
 *       输入"我ABC汉DEF",6,应该输出为"我ABC"而不是"我ABC+汉的半个"。
 * 
 * 问题考察:
 *       1.字符串长度(字符数)与字节数的区别
 *       2.英文只占一个字节,中文占两个字节或者3个字节
 */
public class TestCut {
   
	public static void main(String[] args) {
		String str="我ABC汉DEF";
		str=cutString(str,6);
		System.out.println("截取的字符串:"+str);
	}
    
	//通过字节数截取字符串
	private static String cutString(String str, int i) {
		String tempStr=null;
		StringBuilder resultStr=new StringBuilder();
		int len=0;
		int sum=0;
		for(int j=0;j<str.length();j++){
			tempStr=String.valueOf(str.charAt(j));
			len=tempStr.getBytes().length;
			//判断是否是汉字
			if(len>1){
				sum=sum+len;
				//判断字节数是否已越界
				if(sum<=i){
					resultStr.append(tempStr);
				}else{
					break;
				}
			}else{
				sum=sum+1;
				if(sum<=i){
					resultStr.append(tempStr);
				}else{
					break;
				}
			}
		}
		return resultStr.toString();
	}
	
}


解决思路:1.通过字节数来判断是否中文(正如我上面使用的)

                2.中文的ASCII码是负数


面试的时候遇到这道题、居然不知道怎么做。可能前一段时间都在搞三大框架还有其他技术,却丢了Java基础,结果面试处处碰壁。

基础的东西很重要~ 慎记

2017-6-19