私はJavaで右から左の言語で書かれた文字列を検出するメソッドを作ろうとしています。私はthis questionと何かC#で同様のことをやってきました。
今、私はそのようなものが必要ですが、Javaで書かれています。
ご協力いただければ幸いです。文字列に右から左の文字が含まれているかどうかを検出するにはどうすればよいですか?
6
A
答えて
10
私は、次のコードを思い付いた:それは正確な方法は非常に効率的か、そのことについてではないのですが、1つのアイデアを与えることができます
char[] chars = s.toCharArray();
for(char c: chars){
if(c >= 0x600 && c <= 0x6ff){
//Text contains RTL character
break;
}
}
。私は私のために動作するものを発見したいくつかの解決しようとした後
0
多分これは役立つはず:
http://en.wikipedia.org/wiki/Right-to-left_mark
RTL文字列が存在する場合、Unicodeの文字、つまりU + 200Fがあるはずです。
よろしく
7
質問は古いですが、多分他の誰かが同じ問題を抱えているかもしれません...
:
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
}
+0
RTLテキストはこれらのマークなしで書かれているので、これは機能しません。 – Liggliluff
1
をここでダルコの答えの改良版です。
:このコードは、次の例のすべてのために私の作品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
また、RTL言語であるヘブライ語を含むように(C> = 0x5D0 && C <= 0x6ff)を使用する必要があります。 –