为什么java子字符串不';不要撞车?

为什么java子字符串不';不要撞车?,java,string,substring,Java,String,Substring,它什么也没打印,但我想知道为什么它没有崩溃,它肯定是越界异常,或者我遗漏了什么 抛出:IndexOutOfBoundsException-如果beginIndex为负值或 大于此字符串对象的长度 这里,字符串的长度为1,索引为1,并且不是负值=>未引发异常 有点不直观?对但是substring()的索引选择通常有点不直观:-)来自: 抛出: IndexOutOfBoundsException-如果beginIndex为负值或大于此字符串对象的长度 请注意较大的单词。在您的示例中,它不是(它等于字

它什么也没打印,但我想知道为什么它没有崩溃,它肯定是越界异常,或者我遗漏了什么

抛出:IndexOutOfBoundsException-如果beginIndex为负值或 大于此字符串对象的长度

这里,字符串的长度为1,索引为1,并且不是负值=>未引发异常

有点不直观?对但是substring()的索引选择通常有点不直观:-)

来自:

抛出: IndexOutOfBoundsException-如果
beginIndex
为负值或大于此字符串对象的长度


请注意较大的单词。在您的示例中,它不是(它等于字符串的长度)。

在substring方法中有两个函数

1) 子字符串(int 1,int 2)

此处int 1=起始位置从0开始计数

int 2=结束位置从1开始计数

例:-

2) 子字符串(int 1)

在与上述(1)类似的情况下,起点为int 1,(计数从0开始)终点=字符串的最后一个位置

在你的问题中

String test = "STACKOVERFLOW";
String result = test.substring(0,5); // result is equal to stack

当您使用s1时,子字符串(1)将等于javadoc
中的“空”。子字符串(9)返回“”(空字符串)
@Anatoly我的答案对您有帮助吗?如果是这样的话,我可以打勾并投赞成票吗?谢谢。子字符串有什么傻的?一切都很清楚,并在文件中描述。这可能与你所期望的不同,但如果文件描述了它,那就好了。你是对的,傻瓜是错的。。。“不直观”是正确的。改变。只有当你的直觉是错误的;-)这种约定,包括双参数情形(半开放范围)的约定,是切片序列的最佳约定,也可以说是大多数其他编程的最佳约定。一个更好的直觉是,指数指的是元素之间的间隙,类似于篱笆柱:0在第一个元素之前,1在第一个和第二个元素之间,依此类推。它总是取决于你的期望。。。当一种编程语言开始用“1”来索引数组时,它会让我感到很不舒服——其他人会用“直观”来表示:PI发现它非常直观。将
str.substring(i)
理解为“从
str
开头删除
i
字符”。只要字符串的长度为
=i
,就可以这样做。否则,您将获得异常。
String test = "STACKOVERFLOW";
String result = test.substring(0,5); // result is equal to stack
String s1 = "t";
System.out.println(s1.substring(1)); // "t" 's end point index is the end of the string

// "t" 's start point index is 1 which is also equal to the end of the string in this case