猿问

如何在不使用 String Buffer 类 replace() 方法的情况下替换字符串中的字符?

我需要使用指定字符串片段中的字符替换此 TextLine 中开始(包括)和结束(不包括,即索引 end-1 之前的字符将被替换)之间的字符的替换方法。我不能直接或间接使用 StringBuffer 类的 replace(int start, int end, String fragment) 方法。我正在尝试制作 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);

}

}


宝慕林4294392
浏览 123回答 1
1回答

拉莫斯之舞

对于采用任何字符串并进行替换的独立方法,这将是最简单的。   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”类。
随时随地看视频慕课网APP

相关分类

Java
我要回答