当前位置: 首页 > 知识库问答 >
问题:

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

洪昊然
2023-03-14

我需要使replace方法将该文本行中的开始(包括)和结束之间的字符替换为指定字符串片段中的字符(独占,即索引end-1之前的字符将被替换)。我不能直接或间接地使用StringBuffer类替换(int start,int end,String fragment)方法。我正在尝试使eline.replace(0,3,“abc”);或eline.replace(0,3,“ABC”);工作。

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个答案

陈俊郎
2023-03-14

对于一个独立的方法来说,取任何字符串并进行替换,这将是最简单的。

   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。这应该很容易适应一个原生的“字符串”类。

 类似资料:
  • 我已经做了一个有效的解决方案,但它很无聊,也很不优雅: 如何使用Regex实现这一点?

  • 问题内容: 我有一个以字符串形式传递的句子,我正在对单词“ and”进行替换,我想用“”替换它。而且它不是用空格替换“和”一词。以下是我的逻辑示例。而当我调试此逻辑时,逻辑确实落入了句子。 这里有我想念的东西吗? 问题答案: 而当我调试此逻辑时,逻辑确实落入了句子。 是的,然后你放弃返回值。 Java中的字符串是不可变的-当你调用时,它不会更改现有字符串的内容-它会返回经过修改的新字符串。所以你要

  • 我有一个作为字符串传入的句子,我正在对单词“and”进行替换,我想用“”替换它。它并没有用空白代替“和”。下面是我的逻辑示例。当我调试这个的时候,逻辑就落在句子里了。代替 这里有我遗漏的东西吗。

  • 本文向大家介绍JavaScript使用replace函数替换字符串的方法,包括了JavaScript使用replace函数替换字符串的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了JavaScript使用replace函数替换字符串的方法。分享给大家供大家参考。具体如下: JavaScript通过replace函数替换字符串,下面的代码将Visit Microsoft中的MicroS

  • 问题内容: 我需要在检查的同时将以下更改为- ,以改善圈复杂度。 但是我不确定我将获得什么价值。 问题答案: Java(版本7之前的版本)在switch / case中不支持String。但是您可以通过使用枚举来达到预期的结果。

  • 问题内容: 我正在寻找Python中忽略大小写字符串的比较。 我尝试过: 但忽略案例没有成功。我需要在给定的文本文件中找到一组单词。我正在逐行读取文件。一行上的单词可以是 mandy , Mandy , MANDY 等(我不想使用/等)。 我正在寻找下面的Perl代码的Python等效项。 问题答案: 如果您不想使用,则可以使用正则表达式: