Java String错误的顺序连接不同的语言

Zia*_*hal 9 java string unicode concatenation

屏幕拍摄奇怪的java字符串行为

所以,正如你从图像中看到的那样,我已经连接了a,c和b.我得到了我预期的结果.但是在第二张println中,当我连接a,e和b时,我最终连接起来了,而不是我期待的那样.我想知道,这种行为的原因和这种行为的解决方案.先感谢您.

import java.util.*;
public class prob 
{
    public static void main(String... args)
    {
        String a="???",b="1/2",c="?",e="B";

        System.out.println(a+" : "+c+" : "+b);
        System.out.println(a+" : "+e+" : "+b);
    }
}
Run Code Online (Sandbox Code Playgroud)

编辑(解释为什么我的问题不重复):我的问题是将L2R语言转换为R2L.

Jor*_*lla 12

这是因为第一个字符是R2L(从亚洲语言开始的从右到左的方向),所以下一个字符就在开头(正确的方向):

第一个字符:

??? 
// actual orientation ?
Run Code Online (Sandbox Code Playgroud)

第二个字符添加在L

// add ?
B : ??? 
// actual orientation ?
Run Code Online (Sandbox Code Playgroud)

在此之后,B在欧洲通常是L2R,所以下一个char(1/2)以正确的方向添加在B之后:

// ? add in this direction
B : 1/2 : ??? 
// actual orientation ? (still)
Run Code Online (Sandbox Code Playgroud)

您可以通过复制粘贴char并手动编写另一个来轻松测试它,您将看到方向如何根据您插入的char更改.


更新:

我对这个问题的解决方案是什么,因为我做这个例子只是为了表明我在制作一些大报告时面临的问题,有时数据混合,它是L2R字符串,有时是R2L.我想严格按照这种格式制作一个字符串.(

这个答案:

  • 从左到右嵌入(U + 202A)
  • 从右到左嵌入(U + 202B)
  • 流行方向格式(U + 202C)

所以在java中,要像英语这样的LTR语言嵌入像阿拉伯语这样的RTL语言,你会这样做

myEnglishString + "\u202B" + myArabicString + "\u202C" + moreEnglish
Run Code Online (Sandbox Code Playgroud)

并做相反的事情

myArabicString + "\u202A" + myEnglishString + "\u202C" + moreArabic
Run Code Online (Sandbox Code Playgroud)

看(源材料)


添加2:

char l2R = '\u202A';
System.out.println(l2R + a + " : " + e +" : "+b);
Run Code Online (Sandbox Code Playgroud)

OUTPUT:

???? : B : 1/2
Run Code Online (Sandbox Code Playgroud)