博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java 截取汉字字符串
阅读量:2721 次
发布时间:2019-05-13

本文共 2953 字,大约阅读时间需要 9 分钟。

 

对于汉字的切分 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'));                     }}

 

 

 

转载地址:http://tgvtd.baihongyu.com/

你可能感兴趣的文章
[转]java位操作符总结
查看>>
英文陷阱:Say uncle!叫声爷爷
查看>>
jquery+tablesorter的append失败的问题。
查看>>
tab里面放图片和文字做标题,img如何hover?
查看>>
jquery在ajax后新添加的元素,如何绑定事件hover,click?
查看>>
redis等缓存,如何定义key确保唯一?
查看>>
redis 如何开启事务?
查看>>
tomcat6.0.37配置虚拟机JVM内存,cpu多核等。
查看>>
java如何最小值int变成最大值?可作为字符串排序使用
查看>>
sqlsever 查看字符的十六进制编码,用于乱码编码解码解决方案。
查看>>
深入研究jquery的弹出层----唯一兼容jquery1.9和ie火狐谷歌解决方案。
查看>>
如何让div背景透明,内容不透明?兼容ie,火狐,谷歌。
查看>>
百度杀毒,360安全卫士的那些私下的功夫 。
查看>>
Redis持久化整理
查看>>
学习Apache Kafka
查看>>
2017年终总结
查看>>
spring boot之旅
查看>>
Linux 引导的六个步骤(启动顺序)
查看>>
Linux避免多次sudo时重复输入密码的另一种实现
查看>>
高效能人士的七个习惯-第五章-阅读
查看>>