`

关于截取字符串长度 中文不能截取半个的问题

 
阅读更多
import java.io.UnsupportedEncodingException;



public class StrCut {
	public static void main(String[] args) throws Exception {
		System.out.println(subString("我abc你好asd",6));
	}
	
	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;   
        }   
        int count = 0;   
        for(int i=0; i<len; i++){   
            //将每个字节数组转换为整型数,因为后面根据值的正负来判断是否为汉字   
            int value = strBytes[i];   
            //如果是汉字(负),则统计截取字符串中的汉字所占字节数   
            if(value < 0){      
                count++;   
            }   
        }   
        //依据判断给定的字符串是否含有汉字,利用String类的substring()方法来截取不同的长度   
           
       //根据所统计的字节数,判断截取到字符是否为半个汉字,奇数为半个汉字   
        if(count % 2 !=0){   
            //如果在截取长度为1时,则将该汉字取出,   
            //其他情况则不截取这里的截取长度则按字符长度截取(截取字节长度数-截取汉字字节数/2-截取到的半个汉字的字节数)   
            len = (len == 1)?len:len-count/2-1;   
        }else{   
            //截取字符长度为字节长度-汉字所占字节长度/2(汉字占两个字节)   
            len = len-(count/2);   
        }   
            return str.substring(0,len);   
    }   
}

 以上为截取长度为6如果最后一个为中文则不显示的问题

 

分享到:
评论

相关推荐

    字符串 截取

    指定截取字节数,截取字符串,但是不能出现半个汉字的情况,例如: 字符串"喊sd中d王",长度2byte为:喊,长度3byte为:喊s,长度4byte为:喊sd,长度5byte为:喊sd,长度6byte为:喊sd中

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

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

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

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

    mysql 截取指定的两个字符串之间的内容

    如 现有字符串 “[]aseabcd[12345]ddxabcdsx[]”,要截取”abcd[” 和 “abcd[“之后的第一个 “]” 之间的内容 “12345”,当然当中的内容长度不是固定的,可以是”123456″ 或者其他字符串。 他问我的时候,我第一...

    Java算法之对字符串的各种处理(二)

    核心思路:输入一个字符串和字节数,输出按字节数截取字符串, 其中要保证汉字不能被截半个字节,设计思路就是判断汉字占几个字节,通过string.valueof.getBytes()方法获取字符的字节数,之后遍历判断不要超过指定的...

    PHP中实现中文字串截取无乱码的解决方法

    在PHP中,substr()函数截取带有中文字符串的话,可能会出现乱码,这是因为中西文一个字节所占有的字节数不一样,而substr的长度参数是按照字节去算的,在GB2312编码时,一个中文占2个字节,英文为1个字节,而在UTF-8...

    delphi 开发经验技巧宝典源码

    0177 截取指定位置的字符串 115 0178 清除字符串中指定的字符 115 0179 如何实现文本的加密与解密 116 0180 提取字符串中指定子字符串后的字符串 117 0181 替换指定的字符串 117 0182 在文本中删除指定的...

    JavaScript常用内置对象用法分析

    博主最近半个月没有更新博客,主要是每天都在学车中,学车的过程虽然挺折腾的,但是人吗总得学会适应,在百忙之中给大家分享一篇关于JavaScript的内置对象,不清楚的小伙伴可以进来看看。 (1)String对象 当使用到...

    delphi 开发经验技巧宝典源码06

    0177 截取指定位置的字符串 115 0178 清除字符串中指定的字符 115 0179 如何实现文本的加密与解密 116 0180 提取字符串中指定子字符串后的字符串 117 0181 替换指定的字符串 117 0182 在文本中删除指定的...

    100个直接可以拿来用的JavaScript实用功能代码片段(1-10)

    1、原生JavaScript实现字符串长度截取 2、原生JavaScript获取域名主机 3、原生JavaScript清除空格 4、原生JavaScript替换全部 5、原生JavaScript转义html标签 6、原生JavaScript还原html标签 7、原生JavaScript时间...

    PHP程序开发范例宝典III

    实例114 限制输入字符串的长度 171 实例115 验证字符串是否以指定字符串开头 172 实例116 验证身份证号码 174 实例117 验证护照编号 175 实例118 验证车牌号码 176 4.4 自定义验证 177 实例119 验证...

    php部分常见问题总结

    目录: 1:为什么我得不到变量 2:调试你的程序 3:如何使用session 4:为什么我向另一网页传送变量时,只得到前半部分,以空格开头的则全部丢失 5:如何截取指定长度汉字而不会出现以”?&gt;”结尾,超出部分以”…”代替...

    PHP开发实战1200例(第1卷).(清华出版.潘凯华.刘中华).part1

    实例112 解决用substr()函数对中文字符串截取时出现乱码的问题 143 实例113 字符串与HTML标记相互转换 144 实例114 运用PHP 5.0新型字符串输出XML数据 145 实例115 判断字符串中是否存在指定子串 146 2.9 正则表达式...

    PHP开发实战1200例(第1卷).(清华出版.潘凯华.刘中华).part2

    实例112 解决用substr()函数对中文字符串截取时出现乱码的问题 143 实例113 字符串与HTML标记相互转换 144 实例114 运用PHP 5.0新型字符串输出XML数据 145 实例115 判断字符串中是否存在指定子串 146 2.9 正则表达式...

    C#编程经验技巧宝典

    73 &lt;br&gt;0106 如何获得一个字符串中数字的长度 74 &lt;br&gt;0107 如何获得字符串中数字或字母的长度 74 &lt;br&gt;0108 如何获得字符串中某个数字的位置 75 &lt;br&gt;0109 获得字符串中汉字的个数 76 &lt;br&gt;0110...

    2.6号面试题---编程

    定义一个开关用来和控制是否汉字! 控制两个长度!

    最新JAVA编程题全集_50题及答案

    写一个函数,给你一个字符串 倒序输出来 public String getString(String str){ if(str!=null){ String newStr = ""; for(int i=0;i();i++) { char c = str.charAt(str.length()-1-i); newStr = ...

    VB API 范例 150例 光盘 源码

    ├─Example001-悬挂式窗口 ├─Example002-半透明窗口 ├─Example003-椭圆形窗口 ├─Example004-组合圆形窗口 ├─Example005-多边形窗口 ├─Example006-艺术窗口 ...└─Example150-字符串长度

Global site tag (gtag.js) - Google Analytics