我使用StringBuilder类编写了java程序。
class StringHandling2
{
public static void main(String args[])
{
StringBuilder sb=new StringBuilder("Welcom");
sb.replace(1,1,"JAVA");
System.out.println(sb);
}
}
我的输出是WJAVAelcome
在我修改了这个程序中的replace()的索引值后,
class StringHandling2
{
public static void main(String args[])
{
StringBuilder sb=new StringBuilder("Welcom");
sb.replace(2,1,"JAVA");
System.out.println(sb);
}
}
jvm抛出运行时错误,即StringIndexOutofBoundException。
如何在该程序中使用replace(int startIndex,int endIndex,string)?
答案 0 :(得分:4)
public StringBuilder replace(int start, int end, String str)
用此替换此序列的子字符串中的字符 指定String中的字符。子串开始于 指定start并扩展到索引结束处的字符 - 1或to 如果不存在这样的字符,则序列的结尾。首先是 删除子字符串中的字符,然后删除指定的字符串 在开始时插入。 (这个序列将被延长以适应 必要时指定的字符串。)
<强>参数:强>
start - The beginning index, inclusive.<br> end - The ending index, exclusive.<br> str - String that will replace previous contents.<br>
<强>返回:强>
This object.<br>
<强>抛出:强>
StringIndexOutOfBoundsException - **if start is negative, greater than length(), or greater than end**.
(source)
sb.replace(2,1, “JAVA”);
2&gt; 1,因此例外。
答案 1 :(得分:3)
答案 2 :(得分:1)
这是非常常见的概念;根据{{1}}方法的JavaDoc
replace()
使用指定String中的字符替换此序列的子字符串中的字符。子字符串从指定的开始处开始并延伸到索引结束处的字符 - 1或如果不存在此类字符则延伸到序列的结尾。首先删除子字符串中的字符,然后在start处插入指定的String。 (如果需要,将延长此序列以容纳指定的字符串。) 参数:
start - 起始索引,包括在内。
end - 结束索引,独占。
str - 将替换先前内容的字符串。
返回: 这个对象。
抛出:
StringIndexOutOfBoundsException - 如果start为负数,大于length()或大于end。
在你的情况下,start start大于start,这显然会抛出ArrayOutOfBoundException。
编辑:如果您对此感到好奇,那么使用public StringBuilder replace(int start,
int end,
String str)
类替换字符,这是通过在背景中创建隐藏的字符数组来实现的。
答案 3 :(得分:0)
好问题。
StringBuilder.replace(int start, int end, String s)
将字符串s中的起始索引中的字符替换为小于结束索引的字符。
例如。
StringBuilder str = new StringBuilder("hello world");
str.replace(0,1,"welcome"); // o/p -welcomeello world
str.replace(2,5,"welcome"); // o/p - hewelcome world
我猜它在内部将字符串转换为char [] charArray
&amp;用字符串参数值替换char[start]
到char[end-1]
。
所以你总是end
必须大于开始