加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – 为什么String.endsWith和String.startWith不一致?

发布时间:2020-12-15 05:14:34 所属栏目:Java 来源:网络整理
导读:参见英文答案 lower case of turkish character dotted i????????????????????????????????????1个 我有以下测试用例,只有第一个断言通过.为什么? @Testpublic void test() { String i1 = "i"; String i2 = "?".toLowerCase(); System.out.println((int)i1.
参见英文答案 > lower case of turkish character dotted i????????????????????????????????????1个
我有以下测试用例,只有第一个断言通过.为什么?

@Test
public void test() {
    String i1 = "i";
    String i2 = "?".toLowerCase();

    System.out.println((int)i1.charAt(0)); // 105
    System.out.println((int)i2.charAt(0)); // 105

    assertTrue(i2.startsWith(i1));

    assertTrue(i2.endsWith(i1));
    assertTrue(i1.endsWith(i2));
    assertTrue(i1.startsWith(i2));
}

回复后更新

我想要的是使用startsWith和endsWith以不区分大小写的方式,使得下面的表达式应该返回true.

"AL?".toLowerCase().endsWith("i");

我想这与C#和Java不同.

解决方法

这是因为小写?(“拉丁大写字母
我在英文语言环境中使用上面的点数转换成两个字符:“拉丁小写字母i”和“组合点上方”.

这解释了为什么它从i开始,但不以i结束(它以结合变音符号结束).

在土耳其语语言环境中,小写字母?根据土耳其语言学规则简单地变成“拉丁语小写字母i”,因此您的代码将起作用.

这是一个测试程序,以帮助弄清楚发生了什么:

class Test {
  public static void main(String[] args) {
    char[] foo = args[0].toLowerCase().toCharArray();
    System.out.print("Lowercase " + args[0] + " has " + foo.length + " chars: ");
    for(int i=0; i<foo.length; i++) System.out.print("0x" + Integer.toString((int)foo[i],16) + " ");
    System.out.println();
  }
}

这是我们在配置为英语的系统上运行它时得到的结果:

$LC_ALL=en_US.utf8 java Test "?"
Lowercase ? has 2 chars: 0x69 0x307

以下是我们在为土耳其语配置的系统上运行时获得的内容:

$LC_ALL=tr_TR.utf8 java Test "?"
Lowercase ? has 1 chars: 0x69

这甚至是07 doc的API文档使用的特定示例,这是您可以用来获取特定区域设置中的小写版本而不是系统默认区域设置的方法.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读