在字符串中删除指定位置的字符。

6

目前,我正在进行一个需要在字符串中删除指定位置字符的项目。有没有简单的方法可以做到这一点?


请查看String#charAt - Paul Samsotha
6个回答

18
使用StringBuilder,该类具有deleteCharAt()方法。然后,您只需使用stringBuilder.toString()来获取您的字符串。
编辑,以下是一个示例:
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());
}

6

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

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

例如,假设你要删除第三个字符:

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

3
您可以将字符串转换为 StringBuilder,它有方便的 deleteCharAt 方法。
String strWithoutChar = new StringBuilder(yourString).deleteCharAt(yourIndex).toString();

但请记住,使用这种方法可以帮助你减少一些样板代码,但相比使用String#substring方法会更占用内存。


如果您在答案中包含代码描述,人们更有可能为您的答案投票。 - The Guy with The Hat

1
您可以通过将旧字符串复制到新字符串中,并小心地删除一个字符来实现此目的,如下所示:
String newString = oldString.substring(0, index) + oldString.substring(index+1);

请记住,如果您需要多次执行此操作,不断创建新字符串是相当低效的。


0
一个替代方法是使用substring方法,但使用concat代替+。
String removeCharAt(String s, int index) {
    return s.substring(0, index).concat(s.substring(index + 1));
}

0
无论同行学者们在这里说了什么,我都同意他们给出的正确答案。但是,如果你正在处理一个生产级别的程序,每个漏洞都会被放大,我建议你不要使用字符串的“Substring”方法,因为:
(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]='\000'; // '\000' is the null character

 System.out.println(new String(b));

}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接