`

编程:编写一个截取字符串的函数,(网上流传的答案有的是错的)输入为一个字符串和字节数,输出为按字节截取的字符串。 但是要保证汉字不被截半个,如“我ABC”4

阅读更多
网上流传的答案是错误的:在此更正一下
public class StringSplit {
	public static void main(String[] args) throws Exception {
		String ss = "a很bc你好";
		System.out.println(splitString(ss, 1));
	}

	public static String splitString(String str, int byteLength)
			throws Exception {
		//如果字符串为空,直接返回
		if(str == null || "".equals(str)) {
			return str;
		}
		//用于统计这个字符串中有几个中文字符
		int wordCount = 0;
		//统一按照gbk编码来得到他的字节数组,因为不同的编码字节数组是不一样的。
		byte[] strBytes = str.getBytes("GBK");
		
		//如果只截取一位,而且第一位是中文字符时的处理
		if (byteLength == 1) {
			if (strBytes[0] < 0) {
				return str.substring(0, 1);
			}
		}
		//字符串中的一个中文会使得wordCount 加两次
//如果你这个字节取出来的是一个汉字也就是两个字节当中的一个的话val的值为负数
		for (int i = 0; i < byteLength; i++) {
			int val = strBytes[i];
			if (val < 0) {
				wordCount++;
			}
		}
		
		//如果传递的这个截取的位数没有截到半个中文上面,那么就按照byteLength - (wordCount / 2个长度进行截取
		if (wordCount % 2 == 0) {
			return str.substring(0, (byteLength - (wordCount / 2)));
		}
		//否则,我们就舍弃多出来的这一位 所以  -1 
		return str.substring(0, (byteLength - (wordCount / 2) - 1));

	}
}
分享到:
评论
3 楼 wzk527 2013-01-20  
很好
2 楼 lzh166 2010-04-15  
我,哈哈
1 楼 lzh166 2010-04-15  
String ss = "我很好yes";  
        System.out.println(splitString(ss, 2));
是多少?

相关推荐

    java编写一个截取字符串的函数,输入为一个字符串和字节数.docx

    java编写一个截取字符串的函数,输入为一个字符串和字节数

    java 一个截取字符串的函数

    java 编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串。 要求不能出现截半的情况

    java 面试题 经典收藏

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

    JAVA按字节截取字符串(适用于Unicode)

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

    拆分带中文字符串.zip

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

    截取字符串的五大方法

    是字符串、二进制字符串、text、image、列或包含列的表达式。不要使用包含聚合函数的表达式。 start 是一个整数,指定子串的开始位置。 length 是一个整数,指定子串的长度(要返回的字符数或字节数)。 ...

    截取中英文字符串函数

    可以截取中英文字符串,也可以含有字符,里面有好几个方法 有按字符个数截取 有按字节数来截取不会存在乱码

    java面试题(JAVA代码与编程).pdf

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

    Oracle 基础语句 函数大全(字符串函数

    ORACLE PL/SQL 字符串函数、数学函数、日期函数 --【字符串函数】 --字符串截取substr(字段名,起始点,个数) select Name,substr(Name,2,4),substr(Name,0,3),substr(Name,-2,3),substr(Name,-2,1) from t1; --字符...

    自定义EL函数解决JSTL标签不足之处——按字节长度截取字符串

    这其中最最头疼的就是标题字符的截取的问题,虽然有fn:substring,但表现率以及对中文的支持均不够完善,其实最终还是归结为客户要求太高了,不过做事情就应该严谨嘛,尤其干我们这一行。。在我们老大的指点下,了解...

    Js自动截取字符串长度,添加省略号(……)的实现方法

    JavaScript字符串处理函数,根据定义的长度截取字符串,超出部分裁掉追加……,很多时候网页上显示的内容需要缩成“…”该方法用于处理字符串显示固定长度,超长部分用“…”代替: /**参数说明: * 根据长度截取...

    go语言按显示长度截取字符串的方法

    根据显示长度截取字符串,之前php用的utf8编码,10个英文和10个汉字的显示长度差距太大,按字节截取的话又会出错出现截取半个汉字的情况,所以写了这两个函数. 这两天在折腾golang,所以就用golang重写了着连个函数.代码...

    中文字符串截取的js函数代码

    为了解决这个问题昨天写了根据字节数截取字符串的函数。具体使用很简单,跟String.subString(start, end)一样使用就可。比如:var str = “诶必塞第衣爱抚即”; var str1 = str.subCHStr(2, 2); var str2 = str....

    SQL 截取字符串应用代码

    字符串截取函数,只限单字节字符使用(对于中文的截取时遇上奇数长度是会出现乱码,需另行处理),本函数可截取字符串指定范围内的字符。

    深入SQL截取字符串(substring与patindex)的详解

    整数,指定子串的开始位置 注:SQL中”1″表示字符串中的第一个字符,而.NET中”0″表示第一个字符length:整数,指定子串的长度(要返回的字符数或字节数) 2.patindex 返回指定表达式中某模式第一次出现的起始位置...

    java面试题(面试 宝典)

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

    java面试过程当中遇到的一些题目

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

    PHP中使用substr()截取字符串出现中文乱码问题该怎么办

    但字符串只要出现中文字符,就有可能导致PHP substr中文乱码,因为中文UTF-8编码,每个汉字占3字节,而GB2312占2字节,英文占1字节,截取位数不准确,substr()硬生生地将一个中文字符“锯”成两半,造成断开的字符会...

    C#实现根据字节数截取字符串并加上省略号的方法

    本文实例讲述了C#按字节数截取字符串并在后面加上省略号…的方法,这是一个自定义的C#函数,函数的使用说明如下: 原始字符串 提取前endIdex个字节 &lt;returns&gt;&lt;/returns&gt; 函数代码如下: public static string ...

Global site tag (gtag.js) - Google Analytics