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

java 截取汉字字符串

阅读更多

 

对于汉字的切分 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按字节截取带有汉字的字符串的解法

    关于java按字节截取带有汉字的字符串的解法.不错的一个程序。我也是从高手那拿来的,觉得不错,传上来给感兴趣的朋友学习学习。

    java按字节截取带有汉字的字符串的解法(推荐)

    下面小编就为大家带来一篇java按字节截取带有汉字的字符串的解法(推荐)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧

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

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

    拆分带中文字符串.zip

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

    java 截取字符串(判断汉字)

    jsp截取中文字符串 len为字节长度

    [待删除]字符串截取 - 中英文

    java字符串截取 - 中英文操作系统处理字符汉字

    字符串 截取

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

    Java字符串常用方法

    判断字符串为空 判断Email有效性 判断身份证号码有效性 判断手机号码有效性 判断是否含有特殊字符 ...截取字符串从开始到给定长度的一段 判断字符串是否以某个前缀开头 判断字符串是否以某个后缀结尾

    实现一个按字节来截取字符串的方法,功能类似于string类的substring方法,

    实现一个按字节来截取字符串的方法,功能类似于string类的substring方法,String类是按字符截取 的,例如"中国abc".substring(1,3),将返回“国a”。这里 要求按字节截取,一个英文字符当一个字节,一个中文字符当两...

    Java 按照字节来截取字符串的代码(不会出现半个汉字)

    Java 按照字节来截取字符串的工具,不会出现半个汉字。一个中文两个字节,一个英文字符只占 1 个字节** 1. 通常我们用于前端显示的时候,防止标题过长

    JAVA中截取字符串substring用法详解

    主要介绍了JAVA截取字符串 substring方法,要的朋友可以参考下

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

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

    javascript截取字符串小结

    本文总结介绍了三种使用Javascript截取字符串的方法,同时也总结了两种截取中文字符串的办法,分享一下。 1.substring 方法 定义和用法 substring 方法用于提取字符串中介于两个指定下标之间的字符。 语法 ...

    用javascript实现截取字符串包含中文处理的函数

    1.substring 方法 定义和用法 substring 方法用于提取字符串中介于两个指定下标之间的字符。 语法 stringObject.substring(start,stop) 参数 描述 start 必需。一个非负的整数,规定要提取的子串的第一个字符在 ...

    java字符串处理类

    判断一个字符是Ascill字符还是其它字符(如汉,日,...得到一个字符串的长度,显示的长度,一个汉字或日韩文长度为2,英文字符长度为1 截取一段字符的长度,不区分中英文,如果数字不正好,则少取一个字符位 生成随机字符串

    java 面试题 经典收藏

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

    2Java SE(上).doc

    1)int length():该方法用来获取当前字符串的字符数量,无论中文还是英文每个字符都是1个长度 2)int indexOf(String str):查看给定字符串在当前字符串中的位置。 首先该方法会使用给定的字符串与当前字符串进行...

Global site tag (gtag.js) - Google Analytics