Мне нужно сделать метод replace, который заменяет символы между началом (включительно) и концом (исключаются, т.е. будут заменены символы до индекса end-1) в этой TextLine на символы в указанном фрагменте строки. Я не могу прямо или косвенно использовать метод замены класса StringBuffer (начало int, конец int, фрагмент строки). Я пытаюсь сделать eLine.replace (0, 3, "abc"); или eLine.replace (0, 3, «abc»); работа.
Я пытался создать метод замены, похожий на класс StringBuffer, но он не сработал. Я не могу придумать другой способ сделать замену, вот почему я застрял. Если есть другой способ, пожалуйста, покажите мне пример или решение.
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”