繁体   English   中英

删除字符串中位置的字符

[英]Delete char at position in string

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

使用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());
}

字符串是不可改变的 但是要完成你的任务,你可以

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

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

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方法需要更多的内存。

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

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

请记住,如果您多次这样做,不断创建新字符串效率相当低。

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

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

(2)。 如果您处理许多字符串操作,例如这些操作,最终可能导致“Out of Heap Memory”异常,这在程序中的任何时间点都是不可取的。

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

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));

}

另一种方法是使用substring方法,但使用concat而不是+

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM