阅读了Java的String类的文档后,它似乎不支持从前面弹出(这确实有意义,因为它基本上是一个char数组)。有没有一种简单的方法来做像
这样的事情String firstLetter = someString.popFront();
会从字符串中删除第一个字符并将其返回吗?
答案 0 :(得分:10)
Java中的String是不可变的,因此您无法从中“删除”字符。
您可以使用substring
来获取字符串的一部分。
String firstLetter = someString.substring(0, 1);
someString = someString.substring(1);
答案 1 :(得分:2)
我认为没有类似的东西(即使因为字符串无法更改 - 需要创建新的字符串),但您可以使用charAt
和subString
来实现自己的。
charAt的一个例子:
String aString = "is this your homework Larry?";
char aChar = aString.charAt(0);
然后是subString:
String anotherString = aString.substring(1, aString.length());
答案 2 :(得分:2)
您可以使用java.lang.StringBuilder
的{{1}}和charAt()
方法轻松实现此目的。 deleteCharAt()
也实现了StringBuilder
方法。
http://java.sun.com/j2se/1.5.0/docs/api/java/lang/StringBuilder.html
答案 3 :(得分:1)
所以你基本上想要在FIFO堆栈中使用String?为此,您可以使用LinkedList
在每个pop()
方法下提供,以从堆栈中弹出第一个。
要获取String
中LinkedList
的所有字符,请执行以下操作:
String string = "Hello World";
LinkedList<Character> chars = new LinkedList<Character>();
for (int i = 0; i < string.length(); i++) chars.add(string.charAt(i));
然后你可以按如下方式弹出它:
char c = chars.pop();
// ...
更新:我没有看到您希望能够将其余字符作为字符串返回的评论。好吧,最好的办法是创建并实现自己的StringStack
左右。这是一个启动示例:
public class StringStack {
private String string;
private int i;
public StringStack(String string) {
this.string = string;
}
public char pop() {
if (i >= string.length()) throw new IllegalStateException("Stack is empty");
return string.charAt(i++);
}
public String toString() {
if (i >= string.length()) throw new IllegalStateException("Stack is empty");
return string.substring(i, string.length());
}
}
您可以按如下方式使用它:
String string = "Hello World";
StringStack stack = new StringStack(string);
char c = stack.pop();
String remnant = stack.toString();
// ...
为了使其更加稳固,您最终可以撰写LinkedList
。
答案 4 :(得分:0)
你应该看一下StringReader。 read()方法返回一个字符。