`
flashdream8
  • 浏览: 680382 次
  • 性别: 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编程语言中,处理包含中文字符的字符串时,经常遇到的一个问题是如何正确地截取这些字符串。如果直接按照字节(byte)来进行分割,很容易导致中文字符被截断一半,从而形成乱码。...

    impala中substr()截取中文字符串乱码的问题

    然而,当涉及到处理中文字符时,Impala的内置函数`substr()`和`substring()`可能会遇到一些挑战,尤其是在截取中文字符串时可能出现乱码问题。这是因为这两个函数在设计时可能没有充分考虑多字节字符集,如UTF-8,而...

    截取指定长度的字符串

    而在一些其他语言中,如Java,可能需要先将字符串转换为特定的字符编码(如UTF-8)再进行截取。 在实际应用中,我们可能还需要考虑一些边缘情况,例如当截取的长度超过了字符串的实际长度,这时通常会返回整个字符...

    java编写一个截取字符串的函数,输入为一个字符串和字节数.docx

    Java 字符串截取函数 ...本例中,我们实现了一个 Java 字符串截取函数,该函数可以截取指定字节的字符串,并保证汉字不被截半个。该函数使用 `substring` 方法来实现字符串截取,并且可以应用于各种字符串处理场景。

    Java精确截取字符串.doc

    总的来说,处理中文字符串截取的关键在于识别出汉字字符,并根据其字节位置进行适当的调整。在Java中,可以通过字节码判断是否为中文字符,从而实现精确截取。这些技术在处理中文文本时非常实用,尤其在界面展示、...

    Java精确截取字符串.pdf

    在Java编程中,有时我们需要对字符串进行精确截取,以便适应特定的需求,比如在网页显示、数据存储或者传输时限制长度。本篇将探讨如何在Java中实现这一功能。 首先,最常见的一种方法是使用`substring()`方法。...

    关于java按字节截取带有汉字的字符串的解法

    在Java编程语言中,处理带有汉字的字符串时,由于汉字占据多个字节,按照字节进行截取可能会导致汉字被不完整地分割,从而产生乱码。为了解决这个问题,我们需要理解Unicode编码以及如何在Java中正确处理多字节字符...

    截取字符串

    在编程领域,字符串操作是一项基础且重要的任务,而“截取字符串”是其中的一个关键功能。这个小demo展示了如何在不同的编程环境中实现字符串截取,同时也涉及到字符串的空格处理。接下来,我们将深入探讨这两个主题...

    截取如下字符串“java程序教程”的前5个字节,字符串应该为“java程”,截取前6个字符,字符串也应该为“java程”,程序实现之.

    题目中提到“截取前5个字节, 字符串应该为‘java程’”,意味着我们需要理解,在UTF-8编码格式下,英文字符通常占用1个字节,而中文字符则占用3个字节。因此,实际上,从“java程序教程”中截取前5个字节,得到的...

    java中英文字符串截取

    本文将深入探讨如何在Java中有效地截取包含中文和英文字符的字符串,并解释给出的代码片段背后的逻辑。 ### Java中英文字符串截取的关键点 1. **字符编码的影响**:中文字符在不同的编码方式下占用的字节数不同。...

    按byte截取字符串

    本篇文章将详细探讨“按byte截取字符串”这一技术点,并通过两个Java文件——SliceByByteTest.java和SliceByByte.java的实例来阐述其实现方法。 首先,我们需要理解字符串在计算机内存中的存储方式。在Java中,字符...

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

    该方法能够确保在截断中文字符串时不会出现乱码,并且可以适用于JSP页面中的中文字符串截取需求。 #### 方法实现 ```java /** * 截取字符串,len为字节长度 * @param str 需要截取的字符串 * @param len 字节...

    Java精确截取字符串[归类].pdf

    在Java编程中,有时我们需要对字符串...总的来说,Java中的字符串截取需要考虑到字符编码和中文字符的特殊性,确保截取的结果既准确又符合预期。开发者需要根据实际场景选择合适的方法,保证程序的健壮性和用户体验。

    Java截取中英文混合字符串的方法

    总结来说,Java截取中英文混合字符串的方法需要综合考虑编码方式和汉字占用字节长度的问题,并且需要采取适当的技术手段来确保汉字不会被截断。通过自定义截取方法,并在截取过程中正确地使用编码方式,我们可以有效...

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

    在Java编程语言中,处理包含汉字的字符串时,由于汉字在不同编码格式下占用的字节数不同,按字节截取字符串会面临特殊挑战。本文将深入探讨如何正确地按字节截取带有汉字的字符串,以确保不出现半字符或者乱码的情况...

    JAVA如何按字节截取字符串

    在进行Java编程时,我们经常会遇到需要按字节截取字符串的情况,尤其是在数据传输、网络通信以及对数据进行存储处理的时候。由于计算机内部存储和处理的都是二进制数据,对于非英文字符,在不同的编码(如UTF-8、GBK...

    字符串 截取

    根据给定文件的信息,本文将围绕“字符串截取”这一主题进行深入探讨,重点在于如何在Java环境下实现对包含中文字符的字符串进行精确截取,同时确保不会出现半个汉字的情况。 ### 字符串截取的基本概念 在计算机...

    字符串截取

    ### 字符串截取知识点详解 #### 一、概述 在进行字符串处理的过程中,经常会遇到需要根据特定条件或长度来截取字符串的需求。本篇主要介绍了一种根据指定字节数来截取字符串的方法,并考虑到了不同的编码方式对字符...

    java 中字符串只中英数字混合需要分割的解决办法

    这个方法用来处理java中可能有一些特别的需要,一大串中英文混合,需要中间截断或是中英中间添加一些特别的标识,调用这个方法 第一个参数是要处理的字符串,第二个是要在中英字符中间插入的字符。调用就可以得到想...

    统计字符串中英文标点数量并截取.zip

    这个压缩包内包含的可能是Java代码示例(如csdn-demo),用于批量处理字符串,统计其中的中英文标点符号的数量,并根据指定的字符编码(GBK或UTF)来计算字符串的总长度。如果字符串的总长度超过预设的最大长度,...

Global site tag (gtag.js) - Google Analytics