Java Western + Arabic字符串连接问题

时间:2013-02-19 16:57:55

标签: java unicode string-concatenation

我在连接混合西方和阿拉伯字符的文本时遇到了麻烦。

我有一个这样的令牌列表:

-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说 - 错误地呈现了字符串。

无论如何,谢谢你的帮助!

2 个答案:

答案 0 :(得分:1)

输出正确,如果您要向讲阿拉伯语的用户提供此文本,则会覆盖文本的方向性。阿拉伯语是从右到左书写的。将两个阿拉伯字符串连接在一起时,第一个字符串将显示在第二个字符串的右侧。这由BiDi算法控制,其详细信息包含在http://www.unicode.org/reports/tr9/

答案 1 :(得分:0)

首先,我建议使用StringBuilder而不是raw String concatination。您将使您的垃圾收集器更快乐。其次,没有看到输入或者你的StringTokenizer是如何设置的,我冒昧地猜测你似乎有问题正确地标记字符串。