2013-02-19 104 views
2

我在串聯混合西方和阿拉伯文字符的文本片段時遇到問題。Java西方+阿拉伯字符串串聯問題

我已經標記列表如下:

-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)導致的--let說 - 錯誤地呈現字符串。

無論如何,感謝您的幫助!

+0

你的'tokens'列表是如何填充的? – 2013-02-19 17:02:22

+0

其實我正在處理維基百科拍攝的文字。所以,我下載文本並使用Word標記器將其分爲令牌。 – user278064 2013-02-19 17:07:09

+1

標記器不會更改標記順序。所以你的話不能按照你上面顯示的順序。 – 2013-02-19 17:08:25

回答

1

輸出是正確的,如果您要將此文本呈現給說阿拉伯語的用戶,您應該而不是重寫文本的方向性。阿拉伯語是從右向左書寫的。將兩個阿拉伯文字符串拼接在一起時,第一個字符串顯示在第二個字符的右側。這由BiDi算法控制,詳細信息請參見http://www.unicode.org/reports/tr9/

0

首先,我會建議使用StringBuilder而不是原始字符串concatination。你會讓你的垃圾收集器變得更快樂。其次,沒有看到輸入或你的StringTokenizer是如何設置的,我會冒險猜測,看起來你有問題正確地標記字符串。

+0

我正在使用StringBuilder,但它給了我純String連接的相同結果。所以我用str + =來簡化這個例子。 – user278064 2013-02-19 18:57:57