如何在输入字符串符合条件之前将字符串输入数组?

时间:2014-10-21 21:16:12

标签: java arrays string compare

int i=0;
String x[]= new String[i];
while(true){
    if(x[i]!="stop") {
        x[i]=in.nextLine();
        i++;
        return;
    }
}

我希望用户输入文本命中输入,输入其他一些文本并按回车等,直到用户输入"停止"。然后我希望数组x[i]将所有不同的输入存储为其元素。

NetBeans继续发送

  

线程中的异常" main" java.lang.ArrayIndexOutOfBoundsException:0在app.App.main(App.java:46)

我该如何解决这个问题?

3 个答案:

答案 0 :(得分:1)

由于这一行,你有ArrayIndexOutOfBoundsException

String x[]= new String [i];    // here i = 0

因为您在运行时之前不知道输入大小,所以您需要一个更灵活的数据结构。


使用ArrayList<String>代替该数组:

public static void main(String[] args) {

    ArrayList<String> x = new ArrayList<String>();

    String line = "";
    Scanner in = new Scanner(System.in);

    while(true){
        line = in.nextLine();
        if ("stop".equals(line)) {
            break;
        }
        x.add(line);
    }
    in.close();

    System.out.println(x);  // print the result
}

或使用Java 7中的 try-with-resources

    ArrayList<String> x = new ArrayList<String>();

    try(Scanner in = new Scanner(System.in)) {
        String line = "";
        while(true){
            line = in.nextLine();
            if ("stop".equals(line)) {
                break;
            }
            x.add(line);
        }
    }

答案 1 :(得分:1)

我甚至无法开始纠正您的代码。为了达到你想要的目的,试试这个:

    Scanner in = new Scanner(System.in);
    ArrayList<String> list = new ArrayList<String>();
    String line;
    while (!(line = in.nextLine()).equals("stop")) {
        list.add(line);
    }
    in.close();
    System.out.println(list);

答案 2 :(得分:0)

您已将数组初始化为0(这就是我的开头)。因此,当您开始循环时,x [i]不存在。

我建议使用此问题中详述的ArrayList:How to add new elements to an array?

x[i]!="stop"

当用户输入stop时,也不会评估为true,因为它正在比较对象引用,而不是字符串的内容。

请参阅有关Java中字符串比较的文章:http://docs.oracle.com/javase/tutorial/i18n/text/collationintro.html