在像 substring() 这样的字符串函数中
"hello".substring(0, 3)
返回帮助
而 0-3 索引包括 hell
在正则匹配器的 end() 方法中
mat = Pattern.compile("test").matcher("test");
mat.find();
System.out.println(mat.end());
返回 4 而第一个匹配项在索引 3 处结束
我很好奇为什么java会这样工作
最佳答案
一方面,因为端点被排除在外,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()
与这些一致:start-inclusive,end-exclusive,所以 s.substring(m.start(), m.end())
给你匹配的子串。
关于java - 为什么 Java 在字符串操作中使用一个过去索引作为上限?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49190170/