代码之家  ›  专栏  ›  技术社区  ›  Rajat Charleston

为什么Java在字符串操作中使用一个过去的索引作为上界?

  •  6
  • Rajat Charleston  · 技术社区  · 8 年前

    字符串中的函数,如substring()

    "hello".substring(0, 3)
    

    返回hel
    而0-3指数包括地狱

    在regex Matcher的end()方法中

    mat = Pattern.compile("test").matcher("test");
    mat.find();
    System.out.println(mat.end());
    

    返回4 而第一场比赛在索引3处结束

    我只是好奇为什么java是这样工作的

    1 回复  |  直到 8 年前
        1
  •  7
  •   khelwood Muhammed Elsayed.radwan    8 年前

    首先,因为端点被排除在外, s.substring(i,j) 具有长度 j-i (直觉上是正确的)。

    另一方面, s.substring(i,j) + s.substring(j,k) 等于 s.substring(i,k) (对于 i ,则, j k )。

    而且 s.substring(0, s.length()) 描述整个 s ,因为端点被排除在外。

    如果包含端点,您将不得不不断地记住从事物中添加或减去一个端点,以便使事物工作。

    Matcher.end() 与以下内容一致:开始包含,结束独占,所以 s.substring(m.start(), m.end()) 提供匹配的子字符串。