单个代码链接的多字符串方法

时间:2014-10-29 16:16:43

标签: java string

我正在处理这段代码

public class SimpleStringTest {
public static void main(String args[])
{
String ints="123456789";
System.out.println(ints.concat("0").substring(ints.indexOf("2"),ints.indexOf("0")));
}

根据我对java的了解“当多个方法链接在单个代码语句上时,方法从左到右执行”然后,为什么这一段代码抛出StringIndexOutOfBondsException?

提前致谢, GPAR

2 个答案:

答案 0 :(得分:4)

因为String是不可变的。

通过调用concat,您无法修改ints,而是创建新的String

因此,当您调用ints.indexOf("0")时,ints仍然等于其原值,而indexOf调用返回-1,而substring又将成为外边界您的CharSequence

尝试使用可变StringBuilder的反例,例如StringBuilder ints = new StringBuilder("123456789"); System.out.println(ints.append("0").substring(ints.indexOf("2"),ints.indexOf("0")));

23456789

<强>输出

{{1}}

答案 1 :(得分:2)

因为ints.indexOf("0")应用于原始字符串ints(不是您连接的字符串)。

由于没有“0”indexOf("0")返回-1并且抛出异常。

您的代码与此相同:

String ints="123456789";
int indexOne = ints.indexOf("2");
int indexTwo = ints.indexOf("0");
System.out.println(ints.concat("0").substring(indexOne, indexTwo));