Javaは中英文を分割して、しかも中国語は半分を分割することができませんか?
2187 ワード
最近他のピットに入る準備をしています.面接の過程で、次の問題に出会って、分かち合います.
タイトル:文字列を切り取る関数を作成し、文字列とバイト数を入力し、バイトで切り取る文字列として出力します.しかし、漢字が半分に切られないことを保証するには、「私ABC」4のように、「私AB」に切るべきで、「私ABC漢DEF」を入力し、6、「私ABC+漢の半分」ではなく「私ABC」に出力すべきだ.
考え方:UTF-8、GBKなど、ファイルごとの符号化フォーマットが一致しません.このうちUTF-8は中国語で3バイト、GBKは中国語で2バイトとなっている.そして中国語のバイトは負数です.この原理に基づいて,文字列をバイト配列に変換し,最後の文字が中国語であるか否かを判断することができる.英語の場合は、直接分割して返します.そうでなければ、バイト配列をループし、対応する負数統計を行い、モデリングを行います.
コード実装:
実行結果:
転載先:https://www.cnblogs.com/geshanzsq/p/11099266.html
タイトル:文字列を切り取る関数を作成し、文字列とバイト数を入力し、バイトで切り取る文字列として出力します.しかし、漢字が半分に切られないことを保証するには、「私ABC」4のように、「私AB」に切るべきで、「私ABC漢DEF」を入力し、6、「私ABC+漢の半分」ではなく「私ABC」に出力すべきだ.
考え方:UTF-8、GBKなど、ファイルごとの符号化フォーマットが一致しません.このうちUTF-8は中国語で3バイト、GBKは中国語で2バイトとなっている.そして中国語のバイトは負数です.この原理に基づいて,文字列をバイト配列に変換し,最後の文字が中国語であるか否かを判断することができる.英語の場合は、直接分割して返します.そうでなければ、バイト配列をループし、対応する負数統計を行い、モデリングを行います.
コード実装:
package com.geshanzsq;
import java.io.UnsupportedEncodingException;
/**
* @author geshanzsq
*/
public class SubString {
public static void main(String[] args) throws UnsupportedEncodingException {
String srcStr1 = " ABC";
String srcStr2 = " ABC DEF";
splitString(srcStr1, 4);
splitString(srcStr2, 6);
}
public static void splitString(String str,int size) throws UnsupportedEncodingException {
//
if(str==null){
System.out.println("splitString is null");
return;
}
// 0
if(size<=0){
System.out.println(" 0");
return;
}
// UTF-8 ,gbk ,UTF-8 %3,gbk %3
byte[] bytes = str.getBytes("gbk");
// bytes ,
if(size >= bytes.length){
System.out.println("splitString="+str);
return ;
}
// ,bytes 。 ,
if(bytes[size-1] > 0){
String splitString = new String(bytes,0,size,"gbk");
System.out.println("splitString="+splitString);
return;
}
//
int num = 0;
// ,
for(int i = 0 ; i < size; i++ ){
if(bytes[i]<0){
num++;
num = num % 2;
}
}
String splitString = new String(bytes,0,size-num,"gbk");
System.out.println("splitString="+splitString);
}
}
実行結果:
splitString= AB
splitString= ABC
転載先:https://www.cnblogs.com/geshanzsq/p/11099266.html