前面弹出一个Java字符串

时间:2010-03-06 11:55:04

标签: java string

阅读了Java的String类的文档后,它似乎不支持从前面弹出(这确实有意义,因为它基本上是一个char数组)。有没有一种简单的方法来做像

这样的事情
String firstLetter = someString.popFront();

会从字符串中删除第一个字符并将其返回吗?

5 个答案:

答案 0 :(得分:10)

Java中的String是不可变的,因此您无法从中“删除”字符。

您可以使用substring来获取字符串的一部分。

String firstLetter = someString.substring(0, 1);
someString = someString.substring(1);

答案 1 :(得分:2)

我认为没有类似的东西(即使因为字符串无法更改 - 需要创建新的字符串),但您可以使用charAtsubString来实现自己的。

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()方法下提供,以从堆栈中弹出第一个。

要获取StringLinkedList的所有字符,请执行以下操作:

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()方法返回一个字符。