`
lzh166
  • 浏览: 293727 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

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

 
阅读更多
要求:编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串。 但是要保证汉字不被截半个,如“我ABC”4,应该截为“我AB”,输入“我ABC汉DEF”,6,应该输出为“我ABC”而不是“我ABC+汉的半个”。
/**
		 *  编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串。
		 *  但是要保证汉字不被截半个,如"我ABC"4,应该截为"我AB",输入"我ABC汉DEF",6,
		 *  应该输出为"我ABC"而不是"我ABC+汉的半个"。
		 */
		public static String subString(String str,int len){
			if(str == null && "".equals(str)){
				return null;
			}
			//将字符串中的char数组转换成指定编码方式的byte数组的函数
			byte[] strBytes = null;
			try {
				strBytes = str.getBytes("GBK");
				
			} catch (UnsupportedEncodingException e) {
				e.printStackTrace();
			}
			//得到字符串的长度,判断截取字符串的长度是否在判断的范围内,否则返回原串
			int strLen = strBytes.length;
			if(len >= strLen || len < 1){
				return str;
			}
//			System.out.println("strBytes.length="+strBytes.length);
//			System.out.println("len="+len);
			int count = 0;
			for(int i=0; i<len; i++){
				//将每个字节数组转换为整型数,以为后面根据值的正负来判断是否为汉字
				int value = strBytes[i];
//				System.out.print(value+",");
				//如果是汉字(负),则统计截取字符串中的汉字所占字节数
				if(value < 0){	
					count++;
				}
//				System.out.println("zh count="+count);
			}
			//依据判断给定的字符串是否含有汉字,利用String类的substring()方法来截取不同的长度
			
			//根据所统计的字节数,判断截取到字符是否为半个汉字,奇数为半个汉字
			if(count % 2 !=0){
				//如果在截取长度为1时,则将该汉字取出,
				//其他情况则不截取这里的截取长度则按字符长度截取(截取字节长度数-截取汉字字节数/2-截取到的半个汉字的字节数)
				len = (len == 1)?len:len-count/2-1;
//				System.out.println("处理后的len="+len);
				
			}else{
				//截取字符长度为字节长度-汉字所占字节长度/2(汉字占两个字节)
				len = len-(count/2);
			}
				return str.substring(0,len);
		
		}
		public static void main(String[] args) {
			//情况一:
			String inStr = "我ABC你";   
	        String str = subString(inStr, 6);   
	        System.out.println(str);   //我ABC
	        
	      //情况二:首字符为汉字
	        inStr = "我ABC汉DEF";   
	        str = subString(inStr, 1);   
	        System.out.println(str);   //我
	        
	      //情况三:中间有连续汉字
	       inStr = "我AB爱孩子CDEF";
	       str = subString(inStr,9);   
	       System.out.println(str);   //我AB爱孩
	        
	     //情况四:没有汉字
	       inStr = "ABCDEF";
	       str = subString(inStr,4);   
	       System.out.println(str);   //ABCD
		}
分享到:
评论

相关推荐

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

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

    java 一个截取字符串的函数

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

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

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

    截取中英文字符串函数

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

    截取字符串的五大方法

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

    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,但表现率以及对中文的支持均不够完善,其实最终还是归结为客户要求太高了,不过做事情就应该严谨嘛,尤其干我们这一行。。在我们老大的指点下,了解...

    java 面试题 经典收藏

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

    拆分带中文字符串.zip

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

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

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

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

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

    SQL 截取字符串应用代码

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

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

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

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

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

    SQL_Sever数据库常用语句大全.zip

    datalength返回双字符串字节长度(一个中文2个字节) Host_name返回当前用户所登录的计算机名字 system_user返回当前所登录的用户名称 user_name + while + 变量 遍历获取所有数据库用户名称 replace替换函数 ...

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

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

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

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

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

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

    标题过长使用javascript按字节截取字符串

    做为一个前端开发人员在网页展示中经常会碰到,标题过长,需要截取字符串,用CSS的实现的话各种兼容问题,各种坑。 让后台程序截一下,又各种推托,让后台按字节截一下更是和要了后台老命一样,最后可能只会安字符...

Global site tag (gtag.js) - Google Analytics