在字符串函数中,如substring()
"hello".substring(0, 3)
Run Code Online (Sandbox Code Playgroud)
返回hel
而0-3索引包含地狱
并在正则表达式Matcher的end()方法
mat = Pattern.compile("test").matcher("test");
mat.find();
System.out.println(mat.end());
Run Code Online (Sandbox Code Playgroud)
返回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())为您提供匹配的子字符串.