Java子串endindex-1

时间:2014-12-05 15:57:44

标签: java string substring

我在项目中使用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);`

3 个答案:

答案 0 :(得分:3)

它有许多优点,尤其是s.substring(a,b)的长度为b-a

或许更有用的是

s.substring(0,n)

相同
s.substring(0,k) + s.substring(k,n)

答案 1 :(得分:1)

Java始终将begin参数用作包含,将end参数用作独占以确定范围。

[0:3[ <=> 0, 1, 2
[4:6[ <=> 4, 5

你会在java的API中多次发现这种行为: 列表, 串, ...

几年前在java规范中定义了它。 和imho这很棒,非常有用。 所以有了这个定义,你可以做到这一点。

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());

否则你总是要计算得到字符串的真实最后一个字符。

答案 2 :(得分:0)

javadoc以这种方式解释了原因

endIndex-beginIndex =子字符串的长度

因此参数定义为

beginIndex - 包含起始索引。 endIndex - 结束索引,独占。

用例就是当你做

之类的事情时
int index = 3;
int length = 2;
str.substring(index,index+length); 

当以独占方式使用endIndex时,以编程方式执行操作更容易