Как заменить символы в строке без использования метода replace () класса String Buffer? - PullRequest
0 голосов
/ 10 июля 2019

Мне нужно сделать метод 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”

1 Ответ

0 голосов
/ 10 июля 2019

Для изолированного метода взять любую строку и произвести замену, это было бы самым простым.

   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".

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...