我有以下问题...我想从输入中读取未知数量的字符串。所以,我制作了一个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]);
}
}
答案 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