Zia*_*hal 9 java string unicode concatenation
所以,正如你从图像中看到的那样,我已经连接了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)
看(源材料)
- 双向通用格式更多详细信息,
- 关于"定向格式代码"的Unicode规范章节
添加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)