删除字符串中位置处的字符



目前,我正在处理一个项目,该项目需要删除字符串中设置位置的字符。有简单的方法吗?

使用StringBuilder,它具有方法deleteCharAt()。然后,您可以使用stringBuilder.toString()来获取您的字符串。

EDIT,这里有一个例子:

public static void main(String[] args) {
    String string = "bla*h";
    StringBuilder sb = new StringBuilder(string);
    sb.deleteCharAt(3);
    // Prints out "blah"
    System.out.println(sb.toString());
}

字符串是不可变的!但是为了完成你的任务,你可以

  1. 将子字符串从字符串开头复制到必须删除的字符
  2. 将必须删除的字符的子字符串复制到字符串的末尾
  3. 将第二个字符串附加到第一个字符串上

例如,假设您必须删除第三个字符:

String input = "Hello, World";
String first = input.substring(0, 3);
String second = input.substring(4);
String result = first + second;

您可以将字符串转换为StringBuilder,后者具有方便的deletaCharAt方法。

String strWithoutChar = new StringBuilder(yourString).deleteCharAt(yourIndex).toString();

但请记住,这使您能够删除一些样板代码,但使用String#substring方法会占用更多内存。

这样做的方法是将旧字符串复制到新闻字符串中,小心删除一个字符,如下所示:

String newString = oldString.substring(0, index) + oldString.substring(index+1);

请记住,如果您多次这样做,那么不断地生成新字符串是相当低效的。

无论其他学者在这里说什么,我都同意他们的看法,这给出了正确的答案。但是,如果你正在处理一个生产级别的程序,每个漏洞都会被放大,我建议你不要使用字符串的"子字符串"方法,因为:

(1) 。substring方法实际上为垃圾收集器保留了未标记的父字符串。由于此垃圾收集器无法在其进程中对其进行清理,因此堆空间会被占用,即使未使用,未使用的父字符串仍然存在于堆空间中。

(2) 。如果处理大量这样的字符串操作,最终可能会导致"堆内存不足"异常,这在程序的任何时间点都是不可取的。

使用字符数组及其操作来实现您想要的:

public static void fn1()
{
 String a = "Stack Overflow";
 char[] b = a.toCharArray();
 j // index position of the character that you want to delete
 for(int i=j;i<b.length-1;i++)
 {
     b[i]=b[i+1];
 }
 b[b.length-1]='00'; // '00' is the null character
 System.out.println(new String(b));
}

另一种选择是使用子字符串方法,但使用concat而不是+

String removeCharAt(String s, int index) {
    return s.substring(0, index).concat(s.substring(index + 1));
}

最新更新