我在连接混合西方和阿拉伯字符的文本时遇到了麻烦。
我有一个这样的令牌列表:
-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 :(得分:1)
输出正确,如果您要向讲阿拉伯语的用户提供此文本,则不会覆盖文本的方向性。阿拉伯语是从右到左书写的。将两个阿拉伯字符串连接在一起时,第一个字符串将显示在第二个字符串的右侧。这由BiDi算法控制,其详细信息包含在http://www.unicode.org/reports/tr9/。
中答案 1 :(得分:0)
首先,我建议使用StringBuilder而不是raw String concatination。您将使您的垃圾收集器更快乐。其次,没有看到输入或者你的StringTokenizer是如何设置的,我冒昧地猜测你似乎有问题正确地标记字符串。