java 输出星号号报错_星号字母错误对齐Java

这是一个非常有趣的问题.我决定继续尝试,是的,我可以在这里重复您的问题.我的看法是*不是阿拉伯文本,因此它不应用语言格式.

这是我的测试:

@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);

}

}

}

请记住,此解决方案有些过分,可能会对非阿拉伯语言产生意想不到的副作用.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值