【发布时间】:2011-06-24 15:58:26
【问题描述】:
我需要删除 Java 中字符串特定位置的一些字符。
在 Java 中是否有与 C++ 中的 std::string.erase() 等价的东西?如果没有,有人可以向我展示一个如何循环字符串的每个字符的快速示例,以便我可以计算它们并获取每个字符的位置。
【问题讨论】:
标签: java string position substring
我需要删除 Java 中字符串特定位置的一些字符。
在 Java 中是否有与 C++ 中的 std::string.erase() 等价的东西?如果没有,有人可以向我展示一个如何循环字符串的每个字符的快速示例,以便我可以计算它们并获取每个字符的位置。
【问题讨论】:
标签: java string position substring
您将无法更改String 对象本身,因为Strings 在Java 中是不可变的,但是,您可以通过从旧String 中删除字符来生成新的String 对象。
或者,如果您使用 StringBuilder / StringBuffer 之类的东西,那么这些类提供 a delete(start,end) function 就成为可能
哦,既然您询问了在 String 中处理字符的问题,那么 length() 方法可以为您提供 String 的长度以及 charAt(position)。
【讨论】:
由于String 本身是不可变的,因此没有简单的方法可以做到这一点。
您可以使用substring 来构造新的String:orig.substring(0, index1) + orig.substring(index2)。
但是,如果您进行重复的字符串操作,那么StringBuilder 可能会更好,无论是出于性能和可用性原因:
StringBuilder b = new StringBuilder(orig);
b.replace(index1, index2, "");
StringBuilder 几乎等同于 String 的可变等价物。早期版本使用StringBuffer,其方法完全相同,但同步,通常不需要。
【讨论】:
以documentation开头。
有很多好方法可以让您获得字符索引 (indexOf) 和子字符串 (substring)
查看 c++ 中的擦除文档后,您似乎可以使用 2 次调用 substring 来模仿该行为。您可能想要创建一个StringUtils 类并根据所需的 API 实现您自己的擦除。请注意,Java 中的字符串是不可变的,因此您不能完全复制该行为——对字符串进行更改的每个操作都会返回一个新字符串。
【讨论】:
这里是Java中字符串操作的教程:String Manipulation
你也可以看看这个:Java - String Class
【讨论】:
字符的计数可以使用toCharArray() 方法(http://download.oracle.com/javase/6/docs/api/java/lang/String.html#toCharArray())来实现。
对于更高级的字符串操作(擦除等),您应该使用 StringBuilder/StringBuffer (http://download.oracle.com/javase/6/docs/api/java/lang/StringBuffer.html#deleteCharAt(整数))
【讨论】: