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

标签 java string

在像 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)(对于ijk 的合理值。

此外,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/

相关文章:

java - 更改 JTable 模型后按键绑定(bind)消失

vb.net - 在vb.net中将字符串格式设置为美国电话号码

string - lua表值到字符串性能问题

java - 设置字符串值时数组越界

java - JDialog、JOptionPane 和 JPanel 显示消息

java - 是否可以在 java 中搜索包含压缩对象的文件?

java - 如何在 Dropwizard( Jersey )中记录 JSON 响应

java - 相同主要但不同次要版本的 UnsupportedClassVersionError ?

java - 在 Java 中将字符串拆分为 n 个长度的 block

c - STM32 Discovery 在线程之间共享变量