作者pttworld (批踢踢世界)
看板java
标题Re: [问题] String分割问题
时间Mon Apr 24 22:15:39 2017
※ 引述《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://webptt.com/cn.aspx?n=bbs/java/M.1493043342.A.810.html
1F:→ adrianshum: 这样转成string检查?做个bitwise and 简单很多吧 04/24 22:30
2F:→ ssccg: 感觉原po不是不会自己检查英文还中文,是想问有没有专门切 04/24 23:31
3F:→ ssccg: 2 bytes的String.split,可是String就不是算byte 04/24 23:31
4F:→ XDXQQ: 我也不知道该如何判断是英文还是中文@@ 04/25 01:13