java中replace()的工作机制是什么

时间:2014-07-09 17:53:33

标签: java

我使用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)?

4 个答案:

答案 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)

它用你在第三个参数中给出的字符串替换你指定的开始和结束索引之间的字符。

这种情况的错误来自于你的startindex不能超过你的结束索引。

可以找到更多信息here

答案 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必须大于开始