我需要使用该指定字符串片段中的字符替换方法来替换此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”
答案 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”类。