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

判断一个字符是双字节还是单字节

    博客分类:
  • java
 
阅读更多
对于字符串的处理,经常会遇到需要判断字符是双字节还是单字节(或者全角和半角)的情况,因为双字节字符和单字节字符在屏幕上所占用的空间是不同的,通常情况下双字节字符占用的空间是单字节字符的两倍。比如,一个字符串,可能包含中文英文数字和各种符号等等,将其输出到屏幕上,需要根据长度判断在哪里进行截断(网页编程中经常用到)。
最常见的两种方式。
一种是通过String的getBytes().length来判断,单个字符构成的字符串,其getBytes().length若大于1,则为双字节字符,否则为单字节字符。不过需要注意的是,这种方式有一定缺陷,就是当使用英文操作系统来执行getBytes().length这句代码的时候,单字节双字节文本得到的结果是一样的。这是因为不同的JAVA虚拟机对于字符的处理方式不同。所以,虽然这种方法很简单,而且在大多数时候很有效,但是考虑到可能会有少部分使用英文操作系统的人,还是建议用下一种方法。
另外一种是通过判断某一位的字符是否大于0x80,如果大于则为双字节字符,否则为单字节字符。




/**编程:编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串。
	 * 但是要保证汉字不被截半个,如"我ABC"4,应该截为"我AB",输入"我ABC汉DEF",6,
	 * 应该输出为"我ABC"而不是"我ABC+汉的半个"
	 * @param str
	 * @param byteLength
	 * @return
	 */
	private static String getStringByInputStringAndLength(String str,int byteLength)
	{
//		int byteCount = 0;//字节计数
//		int charCount = 0;//字符计数
//		for(int i=0;i<byteLength;i++)
//		{
//			charCount++;
//			String strTemp = String.valueOf(str.charAt(i));
//			int currentByteNum = strTemp.getBytes().length;
//			if(currentByteNum==2)
//			{
//				byteCount+=2;
//			}
//			else if(currentByteNum==1)
//			{
//				byteCount+=1;
//			}
//			if(byteCount>byteLength)
//			{
//				charCount--;
//				break;
//			}
//		}
//		System.out.println("num:"+charCount);
//		return str.substring(0, charCount);	
		
		int byteCount = 0;//字节计数
		int charCount = 0;//字符计数
		for(int i=0;i<byteLength;i++)
		{
			charCount++;
			int charIndex = (int)str.charAt(i);
			System.out.println("charIndex:"+charIndex);
//			int currentByteNum = strTemp.getBytes().length;
			if(charIndex > 128)
			{
				byteCount+=2;
			}
			else
			{
				byteCount+=1;
			}
			if(byteCount>byteLength)
			{
				charCount--;
				break;
			}
		}
		System.out.println("num:"+charCount);
		return str.substring(0, charCount);	
	}
分享到:
评论

相关推荐

    Delphi判断双字节字符的例子.rar

    Delphi判断双字节,用法简单,在窗口输入框中输入字符串,单击按钮即可,程序会判断出是否包含有双字节字符,判断方法请看下边的代码段:  s := Edit1.Text;  i := 0;  while i begin  if (ByteType(S,i) &lt;&gt; ...

    计算字符串中的单双字节字符个数

    在ASCII编码中,每个字符只需要一个字节(8位)来表示,因此称为单字节字符。这包括英文字符、数字、标点符号等。然而,对于包含多种语言和复杂字符集的Unicode编码,一个字符可能需要两个字节或更多来表示,比如...

    字符串截取(按字节)

    如果截取操作结束于一个字符的中间(即数组索引为奇数的位置),并且该字节的值小于等于0(表明这是UTF-16中的第二个字节),则代码会去除这个字节,确保字符串完整性。 #### 总结 通过上述分析,我们可以看到,按...

    C#字节数组转换成字符串.docx

    另一方面,`System.Text.Encoding.Unicode`通常指的是UTF-16编码,它总是使用两个字节来表示每个Unicode字符,无论这个字符是单字节还是双字节。因此,使用`Encoding.Unicode.GetBytes(s)`转换字符串时,所有字符...

    易语言判断文本是否数字和字母源码

    这段代码首先获取了字符的ASCII码,然后根据码值范围判断字符类型。然而,需要注意的是,易语言处理中文字符时,由于中文字符通常占用两个字节(双字节字符),所以使用ASCII码进行判断并不准确。在易语言中,处理...

    Flex 处理双字节字符(判断汉字长度)的方法

    Flex中的maxChars属性默认是按照单字节字符来计数的,这在处理英文等语言时是没有问题的,因为每个字符通常占用一个字节。但是对于双字节字符集的语言,每个字符可能占用两个甚至更多字节。因此,如果仅使用maxChars...

    Delphi判断中英文

    `ByteType` 是一个用于确定字符串中某个字符字节类型的函数。它返回一个枚举值,该枚举值表示了特定位置上字符的字节类型。在 Delphi 中,`ByteType` 的定义如下: ```pascal function ByteType(const S: string; ...

    Unicode--宽字节字符集[文].pdf

    处理DBCS字符串时,可以使用特定的函数,例如`CharNext`和`CharPrev`来获取字符串中下一个或上一个字符的地址,以及`IsDBCSLeadByte`来判断字节是否为双字节字符的第一个字节。 3. 使用Unicode的原因: - 数据交换...

    C++宽字符处理对照

    - **iswcntrl()**:判断一个宽字符是否为控制字符。 - **iswdigit()**:判断一个宽字符是否为数字。 - **iswgraph()**:判断一个宽字符是否为打印图形字符。 - **iswlower()**:判断一个宽字符是否为小写字母。 - **...

    易语言判断文本中是否有中文

    对于GB2312编码,一个中文字符由两个字节组成,前一个字节的范围在161(0xA1)到254(0xFE)之间,后一个字节的范围在161(0xA1)到254(0xFE)之间。对于GBK和UTF-8编码,中文字符的表示方式更复杂,但同样可以通过...

    ASP截取固定长度字符串

    1. **Left() 函数**:返回一个字符串左端的指定数量的字符。 - `Left(string, length)` - `string`:要提取的字符串。 - `length`:要返回的字符数。 2. **Mid() 函数**:返回字符串中指定位置的子字符串。 - `...

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

    在C#编程语言中,经常需要处理字符串操作,其中一个常见的需求就是根据特定的长度来截取字符串。本文将详细介绍如何使用C#实现字符串的固定长度截取,并深入探讨背后的原理和技术细节。 #### 方法一:使用Substring...

    汇编实现判断输入字符类型

    2. **堆栈段**(Stack Segment):这部分定义了一个大小为128个字节的堆栈区域,用于临时存放数据或函数调用过程中的信息。 3. **代码段**(Code Segment):这是程序的核心部分,包含了主要的逻辑处理过程。 ####...

    易语言判断文本是否数字和字母源码-易语言

    对于单字节字符(如英文、数字),我们可以直接通过ASCII码(American Standard Code for Information Interchange)来判断其类型。ASCII码是一个7位的二进制编码,用于表示128种不同的字符,包括大小写字母和数字。...

    易语言判断UTF-8字符源码

    3. 字节序列分析:判断一个字符串是否为UTF-8,需要检查每个字节的最高位。在易语言中,可以通过“取字节”命令获取字符串中每个字节的值,然后根据UTF-8的字节规则进行验证。 4. 错误处理:在处理编码问题时,可能...

    字符编码笔记.doc

    ASCII码中的每个字符都可以用一个字节(8位)来表示,但最左边的一位通常设置为0,这样就形成了7位的有效编码空间。例如,大写字母"A"的ASCII值是65(二进制01000001)。 然而,ASCII码不足以涵盖所有语言的字符,...

    php字符串截取中文截取2,单字节截取模式

    这个问题在给定的代码中得到了解决,通过定义了一个名为`cn_substr`的函数,实现了中文字符串的单字节截取模式。 `cn_substr`函数接受三个参数:要截取的字符串`$str`,目标长度`$slen`以及起始位置`$startdd`。这...

    Pb字符串中的中文和英文(含符号)拆分

    - 使用 `left()` 和 `leftA()` 函数获取每个字符的第一个字节,判断其是否为中文字符。中文字符的两个字节的第一个字节与 `leftA()` 获取的字符相同,而英文字符的两个字节的第一个字节不同。 - 对于英文字符,将...

Global site tag (gtag.js) - Google Analytics