我正在尝试在Java中创建一种检测从右到左书写语言的字符串的方法。 我已经找到了一个类似于C#的实现,具体请参考此问题。
现在我需要类似于该实现但是用Java编写。
感谢任何帮助。
我正在尝试在Java中创建一种检测从右到左书写语言的字符串的方法。 我已经找到了一个类似于C#的实现,具体请参考此问题。
现在我需要类似于该实现但是用Java编写。
感谢任何帮助。
我想出了以下代码:
char[] chars = s.toCharArray();
for(char c: chars){
if(c >= 0x600 && c <= 0x6ff){
//Text contains RTL character
break;
}
}
这并不是一种非常有效的方法,也不能说是准确的方式,但可以给人一些想法。
问题可能很旧,但可能有其他人遇到了同样的问题...
尝试了几种解决方案后,我找到了适合我的一个:
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
}
Character.getDirectionality(char)
。 - cdalxndr以下是对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;
}
这段代码对以下所有情况都适用:
בוקר טוב => true
good morning בוקר טוב => false
בוקר טוב good morning => true
good בוקר טוב morning => false
בוקר good morning טוב => true
(בוקר טוב) => true