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

输出是正确的,如果您将此文本呈现给讲阿拉伯语的用户,则不应覆盖文本的方向性。阿拉伯语是从右向左书写的。当您将两个阿拉伯字符串连接在一起时,第一个将出现在第二个的右侧。这是由 BiDi 算法控制的,其详细信息在http://www.unicode.org/reports/tr9/中进行了介绍。

于 2013-02-19T17:47:39.313 回答
0

首先,我建议使用 StringBuilder 而不是原始字符串连接。你会让你的垃圾收集器更快乐。其次,没有看到输入或您的 StringTokenizer 是如何设置的,我冒昧地猜测您似乎在正确标记字符串时遇到了问题。

于 2013-02-19T18:50:31.847 回答