【问题标题】:Java substring endindex-1Java 子字符串 endindex-1
【发布时间】:2015-02-03 20:35:09
【问题描述】:
我在一个项目中使用了substring,之前我使用了endindex 位置,它没有产生预期的结果,后来我知道java substring 是endindex-1。我发现它没有用。那么为什么 Java 使用 endindex-1 而不是普通的 endindex 呢?
我的代码如下。
String str = "0123456789";
String parameter1 = str.substring(0,4);
String parameter2 = str.substring(5,8);`
【问题讨论】:
标签:
java
string
substring
【解决方案1】:
它有很多优点,尤其是s.substring(a,b) 的长度为b-a。
也许更有用的是
s.substring(0,n)
结果与
相同
s.substring(0,k) + s.substring(k,n)
【解决方案2】:
javadoc 通过这种方式解释了原因
endIndex-beginIndex = 子串的长度
因此参数定义为
beginIndex - 起始索引,包括。
endIndex - 结束索引,不包含。
一个用例是当你做类似的事情时
int index = 3;
int length = 2;
str.substring(index,index+length);
当以独占方式使用 endIndex 时,以编程方式做事会更容易
【解决方案3】:
Java 总是使用 begin 参数作为包含性参数和 end 参数作为排除性参数来确定范围。
[0:3[ <=> 0, 1, 2
[4:6[ <=> 4, 5
你会在 java 的 API 中多次发现这种行为:
列表,
细绳,
...
它是多年前在 java 规范中定义的。
恕我直言,这很棒而且非常有用。
所以有了这个定义,你就可以做到这一点。
String x = "hello world";
String y = x.substring(0, x.length() - 6); // 6 = number of chars for "world" + one space.
StringBuilder builder = new StringBuilder(y);
builder.append(x.subSequence(5, x.length())); // 5 is index of the space cause java index always starts with 0.
System.out.println(builder.toString());
否则你总是需要计算才能得到一个字符串的最后一个真正的字符。