Re: [問題] String分割問題
※ 引述《XDXQQ (傑洛尼莫)》之銘言:
: 大家好
: 請問String要如何以Byte分割?
: 舉例來說
: String a="ABC安";
: 想要將a以2byte來分割
: 可是當尾巴剛好遇到中文字時
: 若無法分割,則換下一個字串
: 結果就會變成a[0]="AB",a[1]="C",a[2]="安" 這樣
: 請問有辦法辦到嗎?
# 確定轉byte array的編碼,以UTF-8為例:
byte[] b = s.getBytes("UTF-8");
# 檢查byte0確定為幾byte的字:
來源:https://en.wikipedia.org/wiki/UTF-8 1993年版
private int utf8Byte0(byte b) {
if(((b >> 7) & 1) == 0) {
return 1;
} else {
StringBuilder sb = new StringBuilder();
for(int i = 7; i >= 1; --i) {
if(((b >> i) & 1) != 0) {
sb.append("1");
} else {
sb.append("0");
}
}
if(sb.toString().startsWith("10")) {
return 0;
} else if(sb.toString().startsWith("110")) {
return 2;
} else if(sb.toString().startsWith("1110")) {
return 3;
} else if(sb.toString().startsWith("11110")) {
return 4;
} else if(sb.toString().startsWith("111110")) {
return 5;
} else if(sb.toString().startsWith("1111110")) {
return 6;
}
}
return -1;
}
# byte array index 加上某回傳n為下一個字的byte0
回傳這個字佔4個byte代表index x + 4的該byte為下一個字的byte0
x, x + 1, x + 2, x + 3這四個byte可以合成一個字
# 集成 bytes 轉回 java string
String s = new String(array, "UTF-8");
這個array由上述x, x + 1, x + 2, x + 3 這四個byte所形成。
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 115.43.36.13
※ 文章網址: https://www.ptt.cc/bbs/java/M.1493043342.A.810.html
→
04/24 22:30, , 1F
04/24 22:30, 1F
→
04/24 23:31, , 2F
04/24 23:31, 2F
→
04/24 23:31, , 3F
04/24 23:31, 3F
→
04/25 01:13, , 4F
04/25 01:13, 4F
討論串 (同標題文章)
java 近期熱門文章
PTT數位生活區 即時熱門文章