`
xjtusaber
  • 浏览: 54802 次
  • 性别: Icon_minigender_1
  • 来自: 龙黄
社区版块
存档分类
最新评论

java实现中英文混合字符截取方法

    博客分类:
  • java
阅读更多
题目:
编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串。 但是要保证汉字不被截半个,如“我ABC”4,应该截为“我AB”,输入“我ABC汉DEF”,6,应该输出为“我ABC”而不是“我ABC+汉的半个”。    




如果是charset(gb2312, GBK, BIG5), 汉字占两个字节,问题的关键在于考虑截取长度的最后一个字节,如果是属于一个汉字的第一个字节,忽略即可,而汉字每个字节前都是1,所以都是负数,采用if(byte[i]<0)判断是否是汉字的最后一个字节。
目前看到的最好的办法:


import java.io.UnsupportedEncodingException;

public class StringSpliter {

	static void fun1(String str, int length)
			throws UnsupportedEncodingException {

		// System.out.println(str.getBytes().length);
		byte[] bt = str.getBytes("gbk");
		for (int i = 0; i < bt.length; i++) {
			// 打印出字节数组中的值,可以看出只要是汉字[采用GBK编码时占两个字节/UTF-8占3个字节],并且为两个负整数
			// 由于字节的第一位都是1,所以它就是由负数来表示的
			System.out.println(bt[i]);
		}

		// 打印出按实际出入的字节数的所截字符串
		// System.out.println(new String(bt,0,length));

		// 判断最后一个是否为负,如果是负的则丢掉该字节
		if (bt[length] < 0) {
			System.out.println(new String(bt, 0, --length, "gbk"));
		} else {
			System.out.println(new String(bt, 0, length, "gbk"));
		}
	}

	public static void main(String[] args) {

		// StringSpliter.fun1("我ABC", 4);
		try {
			StringSpliter.fun1("我ABC汉DEF", 7);
		} catch (UnsupportedEncodingException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

	}

}
分享到:
评论
2 楼 waixin 2011-07-22  
fun1("我A在大汉DEF", 7);

这样会有问题的
1 楼 hydrogen 2009-04-20  
程序不完全正确,如输入“我ABC汉DEF”,5 时

相关推荐

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

    Java截取中英文混合字符串的方法 Java截取中英文混合字符串的方法是指在Java语言中截取混合了中英文的字符串,并且保证汉字不被截半个的方法。这种方法在实际开发中非常有用,特别是在处理中文字符串时。 在Java中...

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

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

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

    因此,当在Java程序中处理包含中英文混合的字符串时,必须考虑到编码差异,以避免截取错误或乱码的出现。 ### 实践应用 在实际开发中,特别是在Web开发、文本分析等领域,正确处理多语言字符串是非常关键的。使用...

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

    在Java中,处理字符串是非常常见且重要的任务之一,尤其是在涉及到国际化应用时,如何高效准确地处理中英文混合的字符串就显得尤为重要了。本文将基于提供的代码片段来探讨几种不同的Java字符串处理方法,并着重分析...

    Java精确截取字符串.pdf

    然而,当处理包含中文字符的字符串时,简单的按字符截取可能会出现问题,因为中文字符通常占用两个字节,而英文字符只占用一个字节。为了实现更精确的截取,可以采用如下的方法: ```java private String str; ...

    截取中英混合的固定个数表格回显办法

    本文详细介绍了如何在Java中处理中英文混合字符串的截取问题,特别是如何准确计算实际显示长度以及如何自定义截取方法。通过本文提供的方法,可以有效地避免因简单截取而导致的乱码或显示不完整的问题,为开发人员...

    javascript截取字符串(通过substring实现并支持中英文混合)

    javascript截取字符串(支持中英文混合) 代码如下: [removed] var sub=function(str,n){ var r=/[^\x00-\xff]/g; if(str.replace(r,”mm”).length&lt;=n){return str;} var m=Math.floor(n/2); for(var i=m;i&lt;str&gt;=n...

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

    在Java编程语言中,处理包含...通过这样的方法,我们可以确保即使在处理混合字符的字符串时,也能正确地按字节截取而不破坏字符完整性。这在处理数据库字段长度限制或传输数据时特别有用,尤其是在涉及多字节字符集时。

    javascript中使用正则计算中文长度的例子

    在中文和英文混合的文本中,由于中文字符宽度通常大于英文字符宽度,若按英文字符宽度截取中文字符,或按中文字符宽度截取英文字符,很可能会导致显示效果不佳。例如,截取一个昵称时,如果使用英文的标准截取方式,...

    ASP200问.EXE

    18.如何计算中英文混合字符串的长度 19.如何判断字符串是否以指定字符串开头或结尾 20.如何判断字符是否是英文字符 21.如何检测字符串出现的次数 22.如何过滤字符串中的HTML代码 23.如何截取字符串 24.如何实现字符...

    2021-2022计算机二级等级考试试题及答案No.14663.docx

    12. VB6.0中截取字符串:在VB6.0中,使用LEFT函数可以截取字符串,例如`LEFT("Visual Basic 6.0",6)`将返回"Visual"。 13. 软件工程管理:软件工程的理论和技术性研究不仅包括软件开发技术,还包括软件工程管理,以...

    FreeMark学习笔记

    截取子串可以根据字符串的索引来进行,截取子串时如果只指定了一个索引值,则用于取得字符串中指定索引所对应的字符;如果指定两个索引值,则返回两个索引中间的字符串子串.假如有如下数据模型: Map root = new HashMap...

Global site tag (gtag.js) - Google Analytics