`
lg904cyf
  • 浏览: 5552 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

Java 分割字符串---按字节长度分割带有中文字符串,中文不乱码

    博客分类:
  • Java
阅读更多
    中文在不同编码中占用的字节数是不同的,GBK编码中,一个汉字占两个字节,UTF-8编码格式中,一个汉字占3个字节。关于汉字所占字节,知乎有此问答,http://www.zhihu.com/question/20451870。如果我们按照字节数来截取带中文的字符串,就有可能截取了半个或者三分之一个汉字,导致乱码的出现。
package com.java.string.split;

import java.util.ArrayList;
import java.util.List;


public class ChineseSplit {

	public static final String chineseString = "我是testString哈哈哈";
	
	public static void main(String[] args) {
		List<String> splitStringList = chineseSplitFunction(chineseString, 5);
		for (String split:splitStringList) {
			System.out.println(split);
		}
	}

	public static List<String> chineseSplitFunction(String src, int bytes){
		try {
			if(src == null){
				return null;
			}
			List<String> splitList = new ArrayList<String>();
			int startIndex = 0;    //字符串截取起始位置
			int endIndex = bytes > src.length() ? src.length() : bytes;  //字符串截取结束位置 
			while(startIndex < src.length()){
				String subString = src.substring(startIndex,endIndex);
				//截取的字符串的字节长度大于需要截取的长度时,说明包含中文字符
				//在GBK编码中,一个中文字符占2个字节,UTF-8编码格式,一个中文字符占3个字节。
				while (subString.getBytes("GBK").length > bytes) {
					--endIndex;
					subString = src.substring(startIndex,endIndex);
				}
				splitList.add(src.substring(startIndex,endIndex));
				startIndex = endIndex;
				//判断结束位置时要与字符串长度比较(src.length()),之前与字符串的bytes长度比较了,导致越界异常。
				endIndex = (startIndex + bytes) > src.length() ? 
						src.length()  : startIndex+bytes ;
				
			}
			return splitList;
			
		} catch (Exception e) {
			e.printStackTrace();
		}
		return null;
		
	}
	
}

下面是看到的另外一种处理方式http://www.blogjava.net/KingKong/archive/2009/09/22/296088.html
分享到:
评论

相关推荐

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

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

    C# 按照字节长度截取字符串

    在C#编程中,有时我们需要根据字节长度来截取字符串,这可能是因为要处理不同编码格式的数据,或者为了适应特定的传输限制。本篇将详细介绍如何在C#中按照字节长度截取字符串,并结合正则表达式进行操作。 首先,...

    java中截取带汉字的字符串

    ### Java中截取带汉字的字符串 在Java编程语言中,处理包含中文字符的字符串时,经常遇到的一个问题是如何正确地截取这些字符串。如果直接按照字节(byte)来进行分割,很容易导致中文字符被截断一半,从而形成乱码。...

    java 字符串转16进制 16进制转字符串 将两个ASCII字符合成一个字节;

    java 字符串转16进制 16进制转字符串 将两个ASCII字符合成一个字节; java 字符串转16进制 16进制转字符串 将两个ASCII字符合成一个字节; java 字符串转16进制 16进制转字符串 将两个ASCII字符合成一个字节; java ...

    plsql分割字符串

    自定义函数`FUNCTION_SF_SPLIT_STRING`如上所示,是一个典型的用于分割字符串的函数,它接受两个参数:待分割的字符串`STRING`和用作分隔符的子字符串`SUBSTRING`,返回一个`VARCHAR2`类型的数组,其中包含了分割后...

    java字符串处理-中英文-非常有用的

    根据提供的标题、描述、标签及部分内容,我们可以总结出以下关于Java字符串处理的相关知识点: ### Java字符串处理技术:中文与英文的兼容性 在Java中,处理字符串是非常常见且重要的任务之一,尤其是在涉及到国际...

    将字符串按字节分割成等长字符

    除了将记录导出到word方法外(word要把“允许西文在单词中间换行"勾上),笔者写了一个自定义函数,可将字符按用户指定的字节长度参数分割成等长字符,调用时用test(字符串,字节长度)即可,比如字符为”CSDN是个...

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

    当使用`substr()`或`substring()`截取中文字符串时,如果截取的起始位置和长度没有正确地对齐到字符边界,就可能导致部分字符的字节被截断,从而引发乱码。这种问题在其他数据库系统中也常见,尤其是那些不支持...

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

    本文将深入探讨如何正确地按字节截取带有汉字的字符串,以确保不出现半字符或者乱码的情况。 首先,我们需要了解的是,Java默认使用Unicode编码,它对每个字符都分配了一个唯一的16位编码,这意味着大多数汉字在...

    C#字符串截取固定长度的方法

    对于包含非ASCII字符(如中文、日文等)的字符串,简单的`Substring`方法可能会导致乱码。此时,我们需要考虑字符的实际字节数量。 ```csharp public static string CutStringWithEncoding(string inputString, int...

    Java避免UTF-8的csv文件打开中文出现乱码的方法

    然而,在Java中读取和写入csv文件时,中文字符如果不正确地处理,可能会出现乱码的情况。下面我们将详细介绍Java避免UTF-8的csv文件打开中文出现乱码的方法。 首先,需要了解UTF-8和UTF-16LE这两种编码格式。UTF-8...

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

    这里需要注意的是,由于UTF-8编码可能造成字符串和字节数组的长度不一致,例如对于中文字符,“程”字在UTF-8编码下占用3个字节,因此如果截取长度不当时,最后一个字符可能无法形成一个完整的字符。 为了解决上述...

    java字符串的各种编码转换

    根据提供的文件信息,本文将详细解释Java中字符串的不同编码转换方法及原理,并深入探讨每种编码格式的特点。 ### Java字符串的编码转换 在Java中,处理不同字符集之间的字符串转换是一项常见任务。尤其是在处理...

    JAVA中汉字字符转化为英文字符

    ### JAVA中汉字字符转化为英文字符 #### 知识点概览 本文将详细介绍如何在Java中实现汉字到英文字符的转换。此技术主要用于提取汉字的首字母或进行其他基于字符编码的操作。通过以下两个核心方法:`toTureAsciiStr`...

    中英文字符串分割算法C++C程序示例

    那么一段长度为N的字符串,按照存储的ASCII码可以表示为一串如下的字符串(不包含[]) "x .. x][x .. x y x .. x][x .. x", 其中 s,e表示当前正在分析的一段子串(0, 下标e-s = 期望的分割长度cut_size) ^ ^ ^ ^ ^ 0...

    易语言分割字符串进制转换工具

    《易语言分割字符串进制转换工具》是一款专为编程初学者和爱好者设计的实用软件,主要功能是将字符串按照特定规则进行分割,并进行进制之间的转换。易语言,作为中国本土化的一种编程语言,以其简单易学的特点深受...

    字符串截取(按字节)

    通过上述分析,我们可以看到,按字节截取字符串并不简单,特别是当涉及到多字节字符编码时。Java代码示例提供了一个相对复杂的解决方案,通过仔细检查字节序列并确保完整字符的边界,有效地实现了这一功能。这对于...

    javascript的到字符串字节长度

    然而,JavaScript中的字符串长度并不等同于字节长度,因为JavaScript字符串是基于Unicode编码的,每个字符可能占用1到4个字节不等。这与一些其他编程语言(如C或C++)中的字符串处理方式有所不同,在那些语言中,...

    字符串按照指定的字节数来截取

    在IT行业中,字符串处理是一项基础且重要的任务,尤其是在编程领域。字符串是由字符组成的...但要注意,字节截取可能会涉及到字符编码问题,因此在实际操作时要特别留意编码格式,避免出现乱码或者截取不完整的情况。

    JAVA 字符串应用笔记

    - `split(String regex)`: 使用正则表达式分割字符串。 4. **StringBuilder与StringBuffer**: 当需要频繁修改字符串时,应使用`StringBuilder`或线程安全的`StringBuffer`,它们提供了动态增长的机制,性能优于...

Global site tag (gtag.js) - Google Analytics