子串索引范围
Posted
技术标签:
【中文标题】子串索引范围【英文标题】:substring index range 【发布时间】:2011-06-01 23:39:57 【问题描述】:代码:
public class Test
public static void main(String[] args)
String str = "University";
System.out.println(str.substring(4, 7));
输出: ers
我不太明白 substring 方法是如何工作的。索引是否从 0 开始?如果我从 0 开始,e
在索引 4 处,但 char i
在 7 处,所以输出将是 ersi
。
【问题讨论】:
另外,如果将开始索引设置为 str.length(),它不会抛出 IndexOutofBounds 异常。它只会返回一个空字符串。 【参考方案1】:0: 上
1:n
2: 我
3: v
4: e
5: r
6: 秒
7: 我
8: t
9: 是的
起始索引包含在内
结束索引是排他的
Javadoc link
【讨论】:
谢谢,这正是我发现的信息; beginIndex - 起始索引,包括在内。 endIndex - 结束索引,不包含。 只要把它想象成一个以 0 为底的 char 数组,就像所有其他数组一样,第二个参数是 stop 位置而不是结束位置。【参考方案2】:两者都是从 0 开始的,但开头是包含的,结尾是排除的。这确保了结果字符串的长度为start - end
。
为了让substring
操作更轻松,假设字符在 索引之间。
0 1 2 3 4 5 6 7 8 9 10 <- available indexes for substring
u n i v E R S i t y
↑ ↑
start end --> range of "E R S"
引用docs:
子字符串从指定的位置开始
beginIndex
并扩展到 索引endIndex - 1
处的字符。因此 子串的长度是endIndex-beginIndex
.
【讨论】:
【参考方案3】:见the javadoc。它是第一个参数的包含索引,第二个参数是独占索引。
【讨论】:
【参考方案4】:像你一样,我发现它不是自然而然的。我通常仍然需要提醒自己
返回字符串的长度是
lastIndex - firstIndex
您可以使用字符串的长度作为 lastIndex,即使那里没有字符并且尝试引用它会引发异常
所以
"University".substring(6, 10)
即使位置 10 没有字符,也返回 4 个字符的字符串“sity"
”。
【讨论】:
【参考方案5】:public String substring(int beginIndex, int endIndex)
beginIndex
——开始索引,含。
endIndex
——结束索引,独占。
例子:
public class Test
public static void main(String args[])
String Str = new String("Hello World");
System.out.println(Str.substring(3, 8));
输出:“lo Wo”
从 3 到 7 的索引。
还有另一种substring()
方法:
public String substring(int beginIndex)
beginIndex
——开始索引,包括。
返回从beginIndex
到主字符串末尾的子字符串。
例子:
public class Test
public static void main(String args[])
String Str = new String("Hello World");
System.out.println(Str.substring(3));
输出:“lo World”
从 3 到最后一个索引。
【讨论】:
【参考方案6】:是的,索引从零 (0) 开始。这两个参数是 startIndex 和 endIndex,根据文档:
子字符串从指定的 beginIndex 开始并延伸到索引 endIndex - 1 处的字符。
更多信息请参见here。
【讨论】:
【参考方案7】:子字符串从给定的第一个数字的位置开始并包含字符,然后转到,但不包括给定的最后一个数字的字符。
【讨论】:
【参考方案8】:对于 substring(startIndex, endIndex),startIndex 是包含的,endIndex 是排除的。 startIndex 和 endIndex 非常混乱。 我会理解 substring(startIndex, length) 记住这一点。
【讨论】:
【参考方案9】:public class SubstringExample
public static void main(String[] args)
String str="OOPs is a programming paradigm...";
System.out.println(" Length is: " + str.length());
System.out.println(" Substring is: " + str.substring(10, 30));
输出:
length is: 31
Substring is: programming paradigm
【讨论】:
以上是关于子串索引范围的主要内容,如果未能解决你的问题,请参考以下文章
代码点索引的Java子串(将代理代码单元对作为单个代码点处理)
2021-12-18:找到字符串中所有字母异位词。 给定两个字符串 s 和 p,找到 s 中所有 p 的 异位词 的子串,返回这些子串的起始索引。不考虑答案输出的顺序。 异位词 指由相同字母重排列形成