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中文乱码,因为中文UTF-8编码,每个汉字占3字节,而GB2312占2字节,英文占1字节,截取位数不准确,substr()硬生生地将一个中文字符“锯”成两半,造成断开的字符会...
根据显示长度截取字符串,之前php用的utf8编码,10个英文和10个汉字的显示长度差距太大,按字节截取的话又会出错出现截取半个汉字的情况,所以写了这两个函数. 这两天在折腾golang,所以就用golang重写了着连个函数.代码...
如 现有字符串 “[]aseabcd[12345]ddxabcdsx[]”,要截取”abcd[” 和 “abcd[“之后的第一个 “]” 之间的内容 “12345”,当然当中的内容长度不是固定的,可以是”123456″ 或者其他字符串。 他问我的时候,我第一...
核心思路:输入一个字符串和字节数,输出按字节数截取字符串, 其中要保证汉字不能被截半个字节,设计思路就是判断汉字占几个字节,通过string.valueof.getBytes()方法获取字符的字节数,之后遍历判断不要超过指定的...
在PHP中,substr()函数截取带有中文字符串的话,可能会出现乱码,这是因为中西文一个字节所占有的字节数不一样,而substr的长度参数是按照字节去算的,在GB2312编码时,一个中文占2个字节,英文为1个字节,而在UTF-8...
0177 截取指定位置的字符串 115 0178 清除字符串中指定的字符 115 0179 如何实现文本的加密与解密 116 0180 提取字符串中指定子字符串后的字符串 117 0181 替换指定的字符串 117 0182 在文本中删除指定的...
博主最近半个月没有更新博客,主要是每天都在学车中,学车的过程虽然挺折腾的,但是人吗总得学会适应,在百忙之中给大家分享一篇关于JavaScript的内置对象,不清楚的小伙伴可以进来看看。 (1)String对象 当使用到...
0177 截取指定位置的字符串 115 0178 清除字符串中指定的字符 115 0179 如何实现文本的加密与解密 116 0180 提取字符串中指定子字符串后的字符串 117 0181 替换指定的字符串 117 0182 在文本中删除指定的...
1、原生JavaScript实现字符串长度截取 2、原生JavaScript获取域名主机 3、原生JavaScript清除空格 4、原生JavaScript替换全部 5、原生JavaScript转义html标签 6、原生JavaScript还原html标签 7、原生JavaScript时间...
实例114 限制输入字符串的长度 171 实例115 验证字符串是否以指定字符串开头 172 实例116 验证身份证号码 174 实例117 验证护照编号 175 实例118 验证车牌号码 176 4.4 自定义验证 177 实例119 验证...
目录: 1:为什么我得不到变量 2:调试你的程序 3:如何使用session 4:为什么我向另一网页传送变量时,只得到前半部分,以空格开头的则全部丢失 5:如何截取指定长度汉字而不会出现以”?>”结尾,超出部分以”…”代替...
实例112 解决用substr()函数对中文字符串截取时出现乱码的问题 143 实例113 字符串与HTML标记相互转换 144 实例114 运用PHP 5.0新型字符串输出XML数据 145 实例115 判断字符串中是否存在指定子串 146 2.9 正则表达式...
实例112 解决用substr()函数对中文字符串截取时出现乱码的问题 143 实例113 字符串与HTML标记相互转换 144 实例114 运用PHP 5.0新型字符串输出XML数据 145 实例115 判断字符串中是否存在指定子串 146 2.9 正则表达式...
73 <br>0106 如何获得一个字符串中数字的长度 74 <br>0107 如何获得字符串中数字或字母的长度 74 <br>0108 如何获得字符串中某个数字的位置 75 <br>0109 获得字符串中汉字的个数 76 <br>0110...
定义一个开关用来和控制是否汉字! 控制两个长度!
写一个函数,给你一个字符串 倒序输出来 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 = ...
├─Example001-悬挂式窗口 ├─Example002-半透明窗口 ├─Example003-椭圆形窗口 ├─Example004-组合圆形窗口 ├─Example005-多边形窗口 ├─Example006-艺术窗口 ...└─Example150-字符串长度