如何不使用字符串缓冲区类的replace()方法替换字符串中的字符?

时间:2019-07-10 00:52:28

标签: java

我需要使用该指定字符串片段中的字符替换方法来替换此TextLine中start(inclusive)和end(不包括,即索引为end-1的字符)之间的字符。我不能直接或间接使用StringBuffer类的replace(int start,int end,Stringfragment)方法。我正在尝试使eLine.replace(0,3,“ abc”);或eLine.replace(0,3,“ abc”);工作。

我试图制作一个类似于StringBuffer Class的replace方法,但是没有成功。我想不出另一种替代方法,这就是为什么我被困住了。如果还有其他方法,请向我展示示例或解决方案。

public int length;
public char[] characters;

public class TextLineTester {
  public static void main(String args[]) { 
     Scanner input = new Scanner(System.in);
     System.out.println("Enter a line of text.");
     String text = input.nextLine();
     EditableTextLine eLine = new EditableTextLine(text);
     Scanner strCharsInput = new Scanner(System.in);
     System.out.println("Enter string of characters.");
     String str = strCharsInput.nextLine();
     eLine.replace(0, 3, "abc");
     eline.replace(0, str.length(), "abc"); // suppose to replace all occurrences of string eLine with the string ”abc”and print the modified eLine
     System.out.println(eLine.toString());
  }  
}

public void replace(int start, int end, String fragment) {
     if (end > length) {
        end = length;
     }

     int fragmentLength = fragment.length();
     int newLength = length + fragmentLength - (end - start);
     ensureCapacityInternal(newLength);
     System.arraycopy(characters, end, characters, start + 
                                           fragmentLength, length - end);
     fragment.getChars(0,0, characters, start);
     length = newLength;
}

public EditableTextLine(String line) { // creates EditableTextLine object
   length = line.length();
   characters = new char[DEFAULT_SIZE * 2];
   characters = line.toCharArray();
}

public String toString() {
   return "Characters: " + new String(characters);
}

}

This is the error I get from this current replace method. 
  Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException
    at java.lang.System.arraycopy(Native Method)
    at edu.uga.cs1302.txtbuff.EditableTextLine.replace(EditableTextLine.java:109)
    at edu.uga.cs1302.test.TextLineTester.main(TextLineTester.java:36)


 Input: ABCDEFG
 After  eLine.replace(0, 3, "abc"), Output will be 
 Output: abcBCDEFG


 Another example:
 Input: AB678CDEFGHIJK12345
 eLine.replace(2,5,”XY”);  // line is now ”ABXYCDEFGHIJK12345”

1 个答案:

答案 0 :(得分:0)

对于一个孤立的方法,它可以获取任何字符串并进行替换,这是最简单的。

   public static String replace(String orig, int start, int end, String replace) {
      String front = orig.substring(0,start);
      String back = orig.substring(end);
      return front + replace + back;
   }

我有意使用StringBuilder省略了。这应该很容易适应本地的“ String”类。