Fag*_*ack 16 java string unicode utf-16 character-encoding
我有一个可能包含任何unicode字符的变量字符串.其中一个unicode字符是汉.
The thing is that this "han" character has "".length() == 2但是作为单个字符写在字符串中.
考虑下面的代码,我如何迭代所有字符并比较每个字符,同时考虑它可能包含一个长度大于1的字符的事实?
for ( int i = 0; i < string.length(); i++ ) {
char character = string.charAt( i );
if ( character == '' ) {
// Fail, it interprets as 2 chars =/
}
}
Run Code Online (Sandbox Code Playgroud)
编辑:
这个问题不重复.这将询问如何迭代字符串的每个字符,同时考虑包含的.length() > 1字符(字符不是作为char类型而是作为书写符号的表示).这个问题不需要先前知道如何迭代Java String的unicode代码点,尽管提到的答案也可能是正确的.
sst*_*tan 11
int hanCodePoint = "".codePointAt(0);
for (int i = 0; i < string.length();) {
int currentCodePoint = string.codePointAt(i);
if (currentCodePoint == hanCodePoint) {
// do something here.
}
i += Character.charCount(currentCodePoint);
}
Run Code Online (Sandbox Code Playgroud)
的String.charAt和String.length方法治疗字符串作为UTF-16代码单元的序列.您希望将字符串视为Unicode代码点.
查看String API中的"代码点"方法:
codePointAt(int index) 返回给定代码单元索引处的(32位)代码点offsetByCodePoints(int index, int codePointOffset)返回代码单元对应于codePointOffset代码点的代码单元索引index.codePointCount(int beginIndex, int endIndex) 计算两个代码单元索引之间的代码点.通过代码点索引索引字符串有点棘手,特别是如果字符串很长并且您想要有效地执行它.但是,它是可行的,尽管代码相当繁琐.
@sstan的答案是一个解决方案.
| 归档时间: |
|
| 查看次数: |
2521 次 |
| 最近记录: |