将ArrayList转换为数组

时间:2013-01-03 18:03:35

标签: java collections arraylist

我有以下问题...我想从输入中读取未知数量的字符串。所以,我制作了一个arraylist'words'并添加了输入中的所有字符串。然后我想把这个arraylist转换成更简单的String数组'wordsarray'(String [])......正如我那样,我想检查一切是否正常(如果单词保存在'wordsarray'中)所以我 试图打印出整个阵列...但它没有给我我想要的东西......看起来我的代码不起作用。问题出在哪儿? 谢谢你的帮助

public static void main(String[] args) {
    Scanner sc = new Scanner(System.in);

    List<String> words = new ArrayList<String>();

    while(sc.hasNextLine()) {
         words.add(sc.nextLine());
    }

    String[] wordsarray = new String[words.size()];

    for(int i = 0; i < words.size(); i++) {
        wordsarray[i] = words.get(i);
    }

    for(int i = 0; i < words.size(); i++) {
        System.out.println(wordsarray[i]);
    }
}

2 个答案:

答案 0 :(得分:4)

有一种预煮方法可以做你想做的事情:

ArrayList<String> words = new ArrayList<String>();
String[] array = words.toArray(new String[words.size()]);

但是你的代码似乎是正确的,你确定ArrayList内的所有内容都是正确的吗?

根据您的评论,我猜问题是您不会将所有内容放在循环中。这段代码:

while(sc.hasNextLine()) {
  words.add(sc.nextLine());
}

只能工作一次。如果你继续插入单词并按Enter键,那么你已经在循环之外了,因为Scanner已经达到了它还没有更多行可以获取的点。

您应该执行以下操作:

boolean finished = false;

while (!finished) {
  while(sc.hasNextLine()) {
      String line = sc.nextLine();
      if (line.equals(""))
        finished = true;
      else
        words.add(sc.nextLine());
    }
  }
}

答案 1 :(得分:0)

这对我来说很好用:

import java.util.*;

public class a
{
  public static void main (String [] args) throws Exception
  {
    Scanner sc = new Scanner(System.in);

    List<String> words = new ArrayList<String>();

    while(words.size () < 3 && sc.hasNextLine ()) {
        String s = sc.nextLine();
        System.out.println ("Adding " + s);
        words.add(s);
    }

    String[] wordsarray = words.toArray(new String [] {});

    for(int i = 0; i < words.size(); i++) {
       System.out.println("Printing ..." + wordsarray[i]);
    }
  }
}

输出:

java a
1
Adding 1
2
Adding 2
3
Adding 3
Printing ...1
Printing ...2
Printing ...3