星号字母错误对齐Java
作者:互联网
当我查看带有阿拉伯语右对齐文本的列表项时,格式错误.
在所有阿拉伯语声明中,它都可以正常工作. [arWord] .25.3,但仅当文本为*时,它才看起来像这样.
结果:.22.1.*
码:
arabicFormat = String.format(new Locale(Language.Arabic.getCode(),
Language.Arabic.getCountry()), "%d.%d.%s",position,
(h.getSeq() + 1), navText);
预期:*.22.1 [左侧的星号]
结果:.22.1.*
编辑:
该问题也出现在其他字符上,例如,’.
解决方法:
这是一个非常有趣的问题.我决定继续尝试,是的,我可以在这里重复您的问题.我的看法是*不是阿拉伯文本,因此它不应用语言格式.
这是我的测试:
@Test
public void testArabicLanguage() {
// arabic
assertThat(toArabicLanguage("قضاة وحقوقيون يكشفون "), is("22.1.قضاة وحقوقيون يكشفون "));
// english
assertThat(toArabicLanguage("hey"), is("22.1.hey"));
// chinese
assertThat(toArabicLanguage("现在进入"), is("22.1.现在进入"));
// symbol
assertThat(toArabicLanguage("*"), is("22.1.*"));
}
private String toArabicLanguage(String navText) {
String s = String.format(new Locale("ar", "DZ"), "%d.%d.%s", 22, 1, navText);
System.out.println(s);
return s;
}
当我执行以上测试时,一切都通过了.
但是,当我直接在IntelliJ中查看控制台打印输出和测试时,我看到的是从右到左显示的阿拉伯文本.
每当我在此处复制和粘贴文本时,它始终从左到右显示.
这是控制台打印输出:-
22.1.قضاة وحقوقيون يكشفون
22.1.hey
22.1.现在进入
22.1.*
现在,将其与我在IntelliJ中看到的进行比较,阿拉伯语文本从右至左显示:-
更新
如果只想始终先显示navText,则可以使用language-detection库来显示.该库似乎需要使用jsonic库才能起作用.是的,我知道它是日语的,而且我自己也不阅读日语…只需找到jsonic 1.3(1.3.0)并下载即可.
这样,您可以执行以下操作:
public class MyTest {
// language-detection zip file comes with a `profile` dir... just point to it.
@Before
public void setup() {
try {
DetectorFactory.loadProfile("/path/to/language-detection/profiles");
}
catch (LangDetectException e) {
fail("Can't locate the language profiles");
}
}
@Test
public void testArabicLanguage() {
// arabic
assertThat(toArabicLanguage("قضاة وحقوقيون يكشفون "), is("22.1.قضاة وحقوقيون يكشفون "));
// english
assertThat(toArabicLanguage("hey"), is("hey.22.1"));
// chinese
assertThat(toArabicLanguage("现在进入"), is("现在进入.22.1"));
// symbol
assertThat(toArabicLanguage("*"), is("*.22.1"));
}
private String toArabicLanguage(String navText) {
boolean isArabicLanguage = false;
try {
Detector detector = DetectorFactory.create();
detector.append(navText);
isArabicLanguage = detector.detect().equals("ar");
}
catch (LangDetectException e) {
// `*` will throw this exception:-
// "com.cybozu.labs.langdetect.LangDetectException: no features in text"
//
// so, just catch it and treat it as non-Arabic language.
}
if (isArabicLanguage) {
return String.format(new Locale("ar", "DZ"), "%d.%d.%s", 22, 1, navText);
}
else {
return String.format("%s.%d.%d", navText, 22, 1);
}
}
}
请记住,此解决方案有些过分,可能会对非阿拉伯语言产生意想不到的副作用.
标签:string-formatting,string,java 来源: https://codeday.me/bug/20191030/1964202.html