Ham*_*eni 9 java string right-to-left
我正在尝试创建一种方法来检测Java中从右到左书写的字符串.我想出了这个问题做的在C#中类似的东西.
现在我需要有类似的东西,但用Java编写.
任何帮助表示赞赏.
Ham*_*eni 11
我想出了以下代码:
char[] chars = s.toCharArray();
for(char c: chars){
if(c >= 0x600 && c <= 0x6ff){
//Text contains RTL character
break;
}
}
Run Code Online (Sandbox Code Playgroud)
它不是一种非常有效的方式,也不是一种准确的方法,但可以给出一个想法.
问题很老但也许别人可能有同样的问题......
在尝试了几个解决方案后,我找到了适合我的解决方案:
if (Character.getDirectionality(string.charAt(0)) == Character.DIRECTIONALITY_RIGHT_TO_LEFT
|| Character.getDirectionality(string.charAt(0)) == Character.DIRECTIONALITY_RIGHT_TO_LEFT_ARABIC
|| Character.getDirectionality(string.charAt(0)) == Character.DIRECTIONALITY_RIGHT_TO_LEFT_EMBEDDING
|| Character.getDirectionality(string.charAt(0)) == Character.DIRECTIONALITY_RIGHT_TO_LEFT_OVERRIDE
) {
// it is a RTL string
}
Run Code Online (Sandbox Code Playgroud)
这是 Darko 答案的改进版本:
public static boolean isRtl(String string) {
if (string == null) {
return false;
}
for (int i = 0, n = string.length(); i < n; ++i) {
byte d = Character.getDirectionality(string.charAt(i));
switch (d) {
case DIRECTIONALITY_RIGHT_TO_LEFT:
case DIRECTIONALITY_RIGHT_TO_LEFT_ARABIC:
case DIRECTIONALITY_RIGHT_TO_LEFT_EMBEDDING:
case DIRECTIONALITY_RIGHT_TO_LEFT_OVERRIDE:
return true;
case DIRECTIONALITY_LEFT_TO_RIGHT:
case DIRECTIONALITY_LEFT_TO_RIGHT_EMBEDDING:
case DIRECTIONALITY_LEFT_TO_RIGHT_OVERRIDE:
return false;
}
}
return false;
}
Run Code Online (Sandbox Code Playgroud)
此代码适用于以下所有情况:
???? ??? => true
good morning ???? ??? => false
???? ??? good morning => true
good ???? ??? morning => false
???? good morning ??? => true
(???? ???) => true
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
3778 次 |
最近记录: |