我试图让检测写在从右到左的语言在Java中的字符串的方法。 我想出了这个问题做的在C#中类似的东西。
现在,我需要有类似的东西,但用Java编写的。
任何帮助表示赞赏。
Answer 1:
我想出了下面的代码:
char[] chars = s.toCharArray();
for(char c: chars){
if(c >= 0x600 && c <= 0x6ff){
//Text contains RTL character
break;
}
}
这不是一个非常有效的或与此有关的一个准确的方法,但可以提供一个思路。
Answer 2:
问题是旧的,但也许其他人可能有同样的问题...
尝试了多种解决方案后,我发现对我的作品之一:
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
}
Answer 3:
这里的改进达科的回答版本:
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
Answer 4:
也许这应该有所帮助:
http://en.wikipedia.org/wiki/Right-to-left_mark
应该有一个Unicode字符,即U + 200F,当RTL串存在。
问候
文章来源: How to detect if a string contains any Right-to-Left character?