java按字节拆分字符串 后在拼成字符串

是这样的一个方法
publicstaticString[]splitByByteSize(Stringcontent,intsize){
byte[]bytes=content.getBytes();
inttotalSize=bytes.length;
intpartNum=0;
if(totalSize==0){
returnnewString[0];
}
if(totalSize%size==0){
partNum=totalSize/size;
}else{
partNum=totalSize/size+1;
}
String[]arr=newString[partNum];
intarrIndex=-1;
for(inti=0;iif(i%size==0){
arrIndex++;
arr[arrIndex]="";
}
arr[arrIndex]+=((char)bytes[i]);
}
returnarr;
}
Strings[]=splitByByteSize("水",15);
intbyteLen=0;
for(inti=0;ibyteLen+=s[i].getBytes().length;
}
byte[]bytes=newbyte[byteLen];
intoffset=0;
for(inti=0;iSystem.arraycopy(s[i].getBytes(),0,bytes,offset,s[i].getBytes().length);
offset+=s[i].getBytes().length;
}
System.out.println("--"+newString(bytes));
按字节拆分后等字节的放到String数组中。另外有个方法接收String数组后在拼成content原来的值。现在是如果有中文,按字节拆分会有乱码。但是感觉后面按照String数组拼成字符串应该不会乱码。但是还是乱码。请问怎么做才能在用返回的String数组拼成字符串不乱码。
publicstaticvoidmain(String[]args)throwsUnsupportedEncodingException{
Stringarr[]=splitByByteSize("abc刘defghijklmnopqrstuvwxyz",4);
intbyteLen=0;
for(inti=0;ibyteLen+=arr[i].getBytes().length;
}
byte[]bytes=newbyte[byteLen];
intoffset=0;
for(inti=0;iSystem.arraycopy(arr[i].getBytes("utf-8"),0,bytes,offset,arr[i].getBytes("utf-8").length);
offset+=arr[i].getBytes("utf-8").length;
}
System.out.println(">>"+newString(bytes));
}
publicstaticString[]splitByByteSize(Stringcontent,intsize)throwsUnsupportedEncodingException{
byte[]bytes=content.getBytes("utf-8");
inttotalSize=bytes.length;
intpartNum=0;
if(totalSize==0){
returnnewString[0];
}
if(totalSize%size==0){
partNum=totalSize/size;
}else{
partNum=totalSize/size+1;
}
String[]arr=newString[partNum];
intoffset=0;
bytenewBytes[]=newbyte[size];
for(inti=0;iSystem.arraycopy(bytes,offset,newBytes,0,size);
arr[i]=newString(newBytes,"utf-8");
offset+=size;
}
System.arraycopy(bytes,offset,newBytes,0,totalSize-offset);
arr[partNum-1]=newString(newBytes,"utf-8");
returnarr;
}
上面是新代码,但是还有有乱码
森栏
浏览 698回答 2
2回答

杨__羊羊

首先,将string转换成byte流的时候,一定要指定编码(content.getBytes(utf-8)),否则在传输的时候,很有可能就是个杯具;其次,arr[arrIndex]+=((char)bytes[i])这个代码,在Java里面可以通过+=运算符将string和char相加?同上代码,对于双字节编码(例如中文),bytes[i]可能会是一个负数,强制转型成char,由于char的取值范围是0〜(2^16)-1,故此时会转换成一个正值,这样拆分后必然出现乱码,而且这个转换不一定是可逆的,此时再也无法由char恢复byte了,所以拆分后自然无法恢复。解决办法:如果是要跨JVM传输,建议直接传输byte数组,然后重组;如果不跨JVM传输,可先重组成string,然后传输,不过不是特殊需要,还是建议传输byte数组,最终在接收端重组。在这个过程中,有一点切记:转换过程中务必指定编码。这是我们项目组血的教训,后来重申的重要原则之一。byte[]array=content.getBytes("utf-8");//发送端Stringcontent=newString(array,"utf-8");//接收端
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript