java截取汉字字符串问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java截取汉字字符串问题相关的知识,希望对你有一定的参考价值。

这样的 ,我得到一些报文,这些报文规定呢,一个汉字的长度为2,
比如说报文每行中第100个字符到130个字符为客户名称,
那么用字符串表示为:
“中国工商银行广东分行 ”
“中国银行福建分行 ”
一个字符就占2个长度,但是在java字符串中,由于使用了unicode编码,
字符串“中国工商银行广东分行 ”会被java认为是长度20,
“中国银行福建分行 ”会被认为是长度22,
这样的话,我截取报文就错了。
问下大家,我应该怎么办呢?
但是报文里面是把100-130是那个客户名称,但是后面可能还有东西,比如报文的第131到150个字符客户电话
“中国工商银行广东分行 020-88888888 ”
String khmc = line.substring(100,130)//假设line是报文的一行字符,截取100-130的字符
//这个时候khmc =“中国工商银行广东分行 020-88888”
这样就错了,因为我用java unicode去截取,而报文规范里面认为汉字是两个字符,而unicode认为汉字也是一个字符,那么就错了。
明白了,可以这样:
byte []bytes =line.getBytes();//报报文转化为字节码
byte []str = new byte[30];//要截取的字节码
int index = 0;
for(int i=100;i<130;i++)
str[index++] = bytes[i] ;//获取100-130的字节码

String khmc = new String(str);//转化为string

参考技术A 如果说,“中国工商银行广东分行”这样的名称是每行报文的第一个出现的字符串,那么就很简单了,String name = line.split(" ")[0];//""里面的是一个空格. 这样就行了

如果不是每行报文中第一个出现的,那就这样:

String khmc = line.substring(100,130)
khmc = khmc.split(" ")[0];

这样也行
参考技术B public class Test
public static void main(String[] args)
String s="as是的法伤dsassss中国";
char[] ch=s.toCharArray();
StringBuffer sb=new StringBuffer();
for (char c : ch)
if(String.valueOf(c).getBytes().length==2)
sb.append(c);


System.out.println(sb);



这个我手写的可以截取字符串里的所有中文字段,你改下就可以达到你的效果,不明白可以百度hi
参考技术C 使用字节来读取,不要用字符~~
String khmc = new String(Arrays.copyOfRange(line.getBytes(),100,130));
请注意非系统默认编码的情况
参考技术D 先截个100-130的,然后去空格,剩下的就是你要的,这样不行吗?

看了题目补充,有点明白了。
好像跟unicode编码也没关系,报文里1代表一个字节,而java里面1代表一个字符,应该是这么理解的吧?
第5个回答  2010-06-22 那你就用查询下标的方法 从100开始找 找到第二个“行”字的下标
截取就行了

以上是关于java截取汉字字符串问题的主要内容,如果未能解决你的问题,请参考以下文章

java 字符串截取

java算法面试题:编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串,但要保证汉字不被截取半个, 如“我ABC”,4,应该截取“我AB”,输入“我ABC汉DEF”,6,应该

java 如何对中英文和符号数字混合的字符串进行截取,其中包含各种括号( ( [ < >] ) )?

JAVA编写一个截取字符串的函数

从给定字符串中截取n个字节的字符(解决汉字截取乱码问题)

java 按字节截取字符串问题