对于汉字的切分 1个 汉字 占用2个字符 不能切出半个字符
public class StringSplit { public static String split(String s, int n) { int d = n, i = 0; while (i < s.length() && (d > 1 || d == 1 && s.charAt(i) < 256)) { //判断是否为中文了,因为UINICODE规定,字母数组前8位为0,所以不可能大于256 if (s.charAt(i) < 256) d--; else d -= 2; i++; } return s.substring(0, i); } public static String split2(String s, int n) { int count = 0; for(int i = 0; i < s.length() && n>0; i++){ //遍历String if(Character.getNumericValue(s.charAt(i))>0) //如果是中文,中文/英文标点,会返回-1 n--; //是英文,消去一个字节 else n-=2; //是中文,消去二个字节 //每消去一次,代表要截取的char多了一个 //如果n<0也就是在最后只有一个字节可以消的时候,来了个中文:最后剩下1的时候又减去了2。如此就不要截取 if(n>=0) count +=1; } return s.substring(0, count); } public static void main(String[] args) { System.out.println(split("我A汉BC字D", 1)); System.out.println(split("我A汉BC字D", 2)); System.out.println(split("我A汉BC字D", 3)); System.out.println(split("我A汉BC字D", 4)); System.out.println(split("我A汉BC字D", 5)); System.out.println(split("我A汉BC字D", 12)); System.out.println(split("日产计划于2013洛杉矶车展发布一款Juke的最高性能版本车型,名为Juke NISMO RS。这款车将很快投放市场", 35)); System.out.println("---------------------------------"); System.err.println(split2("我A汉BC字D", 1)); System.err.println(split2("我A汉BC字D", 2)); System.err.println(split2("我A汉BC字D", 3)); System.err.println(split2("我A汉BC字D", 4)); System.err.println(split2("我A汉BC字D", 5)); System.err.println(split2("我A汉BC字D", 12)); System.err.println(split2("日产计划于2013洛杉矶车展发布一款Juke的最高性能版本车型,名为Juke NISMO RS。这款车将很快投放市场", 35)); //上述做法原理 //String转为byte[]后,按二进制位数来确定,8位为一个byte,而中文等一个字为16位 System.out.println("你好aa".getBytes().length); //6 //String的长度为字符数,而不论是8还是16位二进制 System.out.println("你好aa".length()); //4 //这个函数是按照String的长度来进行定位的 System.out.println("你好aa".charAt(0)); System.out.println("你好aa".charAt(1)); System.out.println("你好aa".charAt(2)); System.out.println("你好aa".charAt(3)); //中文字符转换为int值时,为-1,而标点不论中英文都为-1 System.out.println(Character.getNumericValue('a')); System.out.println(Character.getNumericValue('1')); System.out.println(Character.getNumericValue(',')); System.out.println(Character.getNumericValue('你')); System.out.println(Character.getNumericValue('好')); System.out.println(Character.getNumericValue(',')); //除去所有标点与数字,中文也是字母 System.out.println(Character.isLetter('你')); System.out.println(Character.isLetter('1')); System.out.println(Character.isLetter(',')); System.out.println(Character.isLetter('。')); System.out.println(Character.isLetter('a')); } }
相关推荐
解决截取字符串中带有汉字的问题,以防截取时汉字截取一般出现错误情况
关于java按字节截取带有汉字的字符串的解法.不错的一个程序。我也是从高手那拿来的,觉得不错,传上来给感兴趣的朋友学习学习。
下面小编就为大家带来一篇java按字节截取带有汉字的字符串的解法(推荐)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
7. 编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串。 但是要保证汉字不被截半个,如“我ABC”4,应该截为“我AB”,输入“我ABC汉DEF”,6,应该输出为“我ABC”而不是“我ABC+汉...
7、编程:编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串。 但是要保证汉字不被截半个,如“我ABC”4,应该截为“我AB”,输入“我ABC汉DEF”,6,应该输出为“我ABC”而不是“我...
jsp截取中文字符串 len为字节长度
java字符串截取 - 中英文操作系统处理字符汉字
指定截取字节数,截取字符串,但是不能出现半个汉字的情况,例如: 字符串"喊sd中d王",长度2byte为:喊,长度3byte为:喊s,长度4byte为:喊sd,长度5byte为:喊sd,长度6byte为:喊sd中
判断字符串为空 判断Email有效性 判断身份证号码有效性 判断手机号码有效性 判断是否含有特殊字符 ...截取字符串从开始到给定长度的一段 判断字符串是否以某个前缀开头 判断字符串是否以某个后缀结尾
实现一个按字节来截取字符串的方法,功能类似于string类的substring方法,String类是按字符截取 的,例如"中国abc".substring(1,3),将返回“国a”。这里 要求按字节截取,一个英文字符当一个字节,一个中文字符当两...
Java 按照字节来截取字符串的工具,不会出现半个汉字。一个中文两个字节,一个英文字符只占 1 个字节** 1. 通常我们用于前端显示的时候,防止标题过长
主要介绍了JAVA截取字符串 substring方法,要的朋友可以参考下
核心思路:输入一个字符串和字节数,输出按字节数截取字符串, 其中要保证汉字不能被截半个字节,设计思路就是判断汉字占几个字节,通过string.valueof.getBytes()方法获取字符的字节数,之后遍历判断不要超过指定的...
本文总结介绍了三种使用Javascript截取字符串的方法,同时也总结了两种截取中文字符串的办法,分享一下。 1.substring 方法 定义和用法 substring 方法用于提取字符串中介于两个指定下标之间的字符。 语法 ...
1.substring 方法 定义和用法 substring 方法用于提取字符串中介于两个指定下标之间的字符。 语法 stringObject.substring(start,stop) 参数 描述 start 必需。一个非负的整数,规定要提取的子串的第一个字符在 ...
判断一个字符是Ascill字符还是其它字符(如汉,日,...得到一个字符串的长度,显示的长度,一个汉字或日韩文长度为2,英文字符长度为1 截取一段字符的长度,不区分中英文,如果数字不正好,则少取一个字符位 生成随机字符串
编程:编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串。 但是要保证汉字不被截半个,如“我ABC”4,应该截为“我AB”,输入“我ABC汉DEF”,6,应该输出为“我ABC”而不是“我ABC+...
1)int length():该方法用来获取当前字符串的字符数量,无论中文还是英文每个字符都是1个长度 2)int indexOf(String str):查看给定字符串在当前字符串中的位置。 首先该方法会使用给定的字符串与当前字符串进行...