2

西洋文字とアラビア文字が混在するテキストを連結するのに問題があります。

次のようなトークンのリストがあります。

-LRB-
دریای
مازندران
-RRB-
,

次の手順を使用して、これらのトークンのリストを連結します。

String str = "";
for (String tok : tokens) {
    str += tok + " ";
}

これは私の手順の出力です:

-LRB- دریای مازندران -RRB- , 

ご覧のとおり、アラビア語の単語の位置が逆になっています。どうすればこれを解決できますか (テキストの方向に関する情報を無視するように Java に提案するかもしれません)。

編集

実際、私の問題は偽の問題だったようです。今、私は新しいものを持っています。(word *)出力が次のようになるように、各単語を次のような文字列でラップする必要があります。

(word1 *)(word2 *)(word3 *)...

私が使用する手順は次のとおりです。

String str = "";
for (String tok : tokens) {
    str += "(" + tok + "*)";
}

しかし、私が得た結果は次のとおりです。

(-LRB- *)(دریای *)(مازندران *)(-RRB- *)(, *)

それ以外の:

(-LRB- *)(دریای)(* مازندران *)(-RRB- *)(, *)

** EDIT2 ** 実際、私の問題は問題ではないことがわかりました。ファイルに文字列を書き、それを nano で (コンソールで) 開きました。そして、それは正しく連結されました。

したがって、問題は、Eclipse コンソール (および gedit) が原因であり、文字列が正しくレンダリングされませんでした。

とにかく、助けてくれてありがとう!

4

2 に答える 2

1

出力は正しく、このテキストをアラビア語を話すユーザーに提示する場合は、テキストの方向性をオーバーライドしないでください。アラビア語は右から左に書かれます。2 つのアラビア文字列を連結すると、最初の文字列が 2 番目の文字列の右側に表示されます。これは BiDi アルゴリズムによって制御され、その詳細はhttp://www.unicode.org/reports/tr9/で説明されています。

于 2013-02-19T17:47:39.313 に答える
0

まず、生の String 連結の代わりに StringBuilder を使用することをお勧めします。あなたはガベージコレクターをもっと幸せにします。第二に、入力や StringTokenizer のセットアップ方法が表示されないため、文字列を適切にトークン化するのに問題があるように思われます。

于 2013-02-19T18:50:31.847 に答える