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

java中对Byte字符数组定长截取的方法

阅读更多
今天在在处理从网络上接收到的字符串,因为是从后台C语言过来的一组拼接的字符串,要定长截取,然而由于C语言是用Byte的方式计数,而java中是用Unicode编码的方式计数,一个中文汉字以Bytes的方式是两个字节,而用Unicode的方式是一个字,所以难以准确的截取出我想到的内容,经过半天的探索发现应该以如下的方式来解决。

        先将字符串转换为Bytes【】数组,编码方式为“Unicode”,转出来的数组中的第一位和第二位是-2和-1,真正的内容从第三位开始,所有的字符都占用两个字节的空间,如果是英文和字母则第一个空间为0,如果是汉字就不是0,通过这样的方法就可以正确处理截取字符串的内容了!
public static String bSubstring(String s, int length) throws Exception  
	{  
	  
	    byte[] bytes = s.getBytes("Unicode");  
	    int n = 0; // 表示当前的字节数  
	    int i = 2; // 要截取的字节数,从第3个字节开始  
	    for (; i < bytes.length && n < length; i++)  
	    {  
	        // 奇数位置,如3、5、7等,为UCS2编码中两个字节的第二个字节  
	        if (i % 2 == 1)  
	        {  
	            n++; // 在UCS2第二个字节时n加1  
	        }  
	        else  
	        {  
	            // 当UCS2编码的第一个字节不等于0时,该UCS2字符为汉字,一个汉字算两个字节  
	            if (bytes[i] != 0)  
	            {  
	                n++;  
	            }  
	        }  
	    }  
	    // 如果i为奇数时,处理成偶数  
	    if (i % 2 == 1)  
	  
	    {  
	        // 该UCS2字符是汉字时,去掉这个截一半的汉字  
	        if (bytes[i - 1] != 0)  
	            i = i - 1;  
	        // 该UCS2字符是字母或数字,则保留该字符  
	        else  
	            i = i + 1;  
	    }  
	  
	    return new String(bytes, 0, i, "Unicode");  
	}



转:http://blog.csdn.net/lifvc/article/details/6760018
分享到:
评论

相关推荐

    java对象转成byte数组的3种方法

    主要为大家详细介绍了java对象转成byte数组的3种方法,具有一定的参考价值,感兴趣的朋友可以参考一下

    字符数组与字符指针

    字符数组与字符指针这两个概念在C/C++中非常重要,编程时会经常使用到,但是很多人容易错误使用!两者有相同地方,也要不同地方,本文详细介绍了两者的区别,能给读者一定的参考!

    Java任意长度byte数组转换为int数组的方法

    主要给大家介绍了关于Java任意长度byte数组转换为int数组的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者使用Java具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧

    C语言程序设计-字符串与字符数组.pptx

    字符串与字符数组 3-1 字符串 存放数值型数据的数组为数值型数组,而字符型数组则是指专门用来存放...数组中每一个元素都是字符型的,称之为字符数组 字符数组的定义:char c[10];或char c[5][10] ; 字符数组的初始化:

    截取指定长度的字符串

    自己输入一个字符串,字符串中可以包括字符和汉字,截取指定的字符串

    c语言字符数组与字符串的使用详解

    若小于数组长度,则只将这些字符数组中前面那些元素,其余的元素自动定为空字符(即 ‘\0’ )。 2、字符数组与字符串在c语言中,将字符串作为字符数组来处理。(c++中不是)在实际应用中人们关心的是有效字符串的...

    用java定长数组实现线性表

    用定长数组实现线性表用定长数组实现线性表

    Java byte数组操纵方式代码实例解析

    主要介绍了Java byte数组操纵方式代码实例解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

    Matlab字符串数组操作指南

    这份资源将为您提供Matlab中字符串数组的详细操作指南,从基础知识到高级操作,帮助您更好地处理和操作字符串数据。无论您是初学者还是有一定经验的开发者,都能从中获益,提升在Matlab编程中的字符串处理能力。 ...

    Java编程实现中英混合字符串数组按首字母排序的方法

    主要介绍了Java编程实现中英混合字符串数组按首字母排序的方法,涉及Java字符串操作及拼音转换的相关使用技巧,具有一定参考借鉴价值,需要的朋友可以参考下

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

    主要为大家详细介绍了java实现中英文混合字符的截取方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

    字符串至字符数组实现汉字字符分割.vi

    一个汉字=2个英文字母=2字节 官方标准:1汉字=2字节 1字节(Byte)=8字位=8个二进制数,在labview中,有时需要对字符串进行分割提取其中的中文字符,需要一定方法来实现,此方法可对其实现分割,并正确显示出来。

    Java数组与内存控制

    Java数组在内存分配方面的知识;Java数组的静态特征;对于数组变量而言,一定要区分它何时是数组变量,何时代表数组对象本身。

    C语言中计算字符串长度与分割字符串的方法

    C语言strlen()函数:返回字符串的长度 头文件: #include strlen()函数用来计算字符串的长度,其原型为: unsigned int strlen (char *...定义了一个大小为100的字符数组,但是仅有开始的11个字符被初始化了,剩

    JS合并两个数组的3种方法详解

    这篇文章主要介绍了JS合并两个数组的3种方法详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 需要将两个数组合并成为一个的情况。比如: var a = [1,2,3];...

    Go语言获取数组长度的方法

    主要介绍了Go语言获取数组长度的方法,实例分析了len函数的使用技巧,具有一定参考借鉴价值,需要的朋友可以参考下

    基于JSON实现传输byte数组过程解析

    主要介绍了基于JSON实现传输byte数组过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

    C#根据指定字节(Byte)长度码表的定长与变长报文读取解析示例

    根据已定义好的码表(指定Byte长度)截取报文的示例,实现语言C#

    c#中结构数组的定义

    c#中结构数组的定义,很全的

    浅谈java中字符串数组、字符串、整形之间的转换

    主要介绍了浅谈java中字符串数组、字符串、整形之间的转换,具有一定参考价值,需要的朋友可以了解下。

Global site tag (gtag.js) - Google Analytics