Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/303.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
不同语言的Java字符串错误顺序连接_Java_String_Unicode_Concatenation - Fatal编程技术网

不同语言的Java字符串错误顺序连接

不同语言的Java字符串错误顺序连接,java,string,unicode,concatenation,Java,String,Unicode,Concatenation,从图中可以看出,我把a,c和b连接起来了。我得到了我期望的结果。 但在第二个println中,当我连接a,e和b时,我最终得到了连接的e,而不是我所期望的位置。 我想知道,这种行为的原因和解决方法。 先谢谢你 import java.util.*; public class prob { public static void main(String... args) { String a="الف",b="1/2",c="ب",e="B"; S

从图中可以看出,我把a,c和b连接起来了。我得到了我期望的结果。 但在第二个println中,当我连接a,e和b时,我最终得到了连接的e,而不是我所期望的位置。 我想知道,这种行为的原因和解决方法。 先谢谢你

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);
    }
}
编辑(解释为什么我的问题不是重复的):
我的问题是如何将L2R语言转换为R2L

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

第一个字符:

الف 
// actual orientation ←
在L处添加第二个字符

// add ←
B : الف 
// actual orientation →
在这之后,B和欧洲一样是L2R,因此在B之后的正确方向添加下一个字符(1/2):

// → add in this direction
B : 1/2 : الف 
// actual orientation → (still)

您可以通过复制粘贴字符并手动写入另一个字符来轻松测试它,您将看到方向如何随插入的字符而变化


更新:

char l2R = '\u202A';
System.out.println(l2R + a + " : " + e +" : "+b);
‪الف : B : 1/2
我对这个问题的解决方案是什么,因为我举这个例子只是为了说明我在制作一些大型报告时面临的问题,其中数据有时是混合的,它是L2R字符串,有时是R2L。我想用这种格式制作一个字符串(

发件人:

  • 从左到右嵌入(U+202A)
  • 从右向左嵌入(U+202B)
  • Pop方向格式(U+202C)
因此,在java中,要将一种RTL语言(如阿拉伯语)嵌入到一种LTR语言(如英语)中,您可以这样做

而反过来呢

请参见(有关源材料)

  • 欲知详情,

附加2:

char l2R = '\u202A';
System.out.println(l2R + a + " : " + e +" : "+b);
‪الف : B : 1/2
输出:

char l2R = '\u202A';
System.out.println(l2R + a + " : " + e +" : "+b);
‪الف : B : 1/2

正如本文中已经提到的,原因是某些字符串具有从右到左的方向

您可以使用
\u200e
控件
字符
,手动将从右向左方向的字符串的方向设置为letf to right,如下所示:

String a="\u200eالف",b="1/2",c="\u200eب",e="B";

System.out.println(a+" : "+c+" : "+b);
System.out.println(a+" : "+e+" : "+b);

“从图像中可以看到”。有盲人正在阅读此网站。他们无法阅读图像。但是,如果您复制并粘贴代码/输出为文本(在代码块中)他们会听到的。我粘贴代码的任何原因可能需要,你可以编译和阅读自己的输出所以,我的解决方案是什么,因为我做这个例子只是为了说明我在制作一些大报告时面临的问题,其中数据有时是混合的,它是L2R字符串,有时是R2L。我想做一个string严格按照此格式。(将在进一步的报告制作中使用)更改为System.out.println(a+“:+”\u202A“+e+”\u202A“+”:“+b);也没有效果。我没有得到我所缺少的here@ZiaUlRehmanMughal请再次检查我的上一个附加组件,您必须考虑结果以及它将如何影响文本,但这并不难…只是玩一下…;)非常感谢您的帮助。如果我要打扰您,请原谅:)我尝试了,但使用System.out.println(a+“:”+(“\u200e”+e)+“:”+b)无法获得所需的输出;和System.out.println(a+“:”+“\u200e”+e+“:”+b);我为什么在函数中设置它有一个原因,这只是一个示例程序,用于解释我在应用程序中遇到的行为,我需要制作和存储(用于以后的打印使用)可以包含L2R或R2L字符串的字符串,我需要以正确的顺序连接它们这不起作用,因为这不是字符串的串联,所以方向的改变不会影响所以,我需要使用连接函数?@JordiCastilla这将所有r2l方向的字符串的r2l方向更改为l2r,这意味着,现在所有的字符串都是l2r方向的,这不会导致任何方向问题。“为什么你认为,你必须使用连接?”JordiCastilla同意,它看起来更明显。但若要在这种情况下使用连接,创建一个新的固定字符串有时会有点昂贵。