我正在尝试创建一个从标准输入读取字符串标记的数组,并将它们放在一个数组中,然后将这些单词输出,直到它到达特定的单词。例如,让我们说我希望我的数组读取一系列单词,直到它达到“#34; okay"从std输入,打印出每个单词,然后在打印出来之前终止"好的"。这个数组的长度是未知的,所以我对如何做到这一点很困惑。
String s = sc.next();
String[] copy = new String[???];
for( int i = 0; i < copy.length; i++ ){
copy[i] = sc.next();
}
答案 0 :(得分:2)
类似的东西:
String s = sc.next();
ArrayList<String> copy = new ArrayList<String>();
while(!s.equals("okay")){
copy.add(s);
s = sc.next();
}
for (String n : copy){
System.out.println(n);
}
答案 1 :(得分:0)
如果您根本不想使用任何列表,那么这就变得不可能了。这只是因为需要在创建数组对象时定义数组大小。
因此,使用此约束,您可以拥有一个大整数并声明该大小的数组。
Final int MY_LARGE_CONST = 3000; ... String [] tokens = new String [MY_LARGE_CONST] ...
这很浪费,因为它占用更多内存,如果你有比常数更多的令牌,它将会失败。
另外,如果你对列表没问题并且没有通过迭代来进行实际处理,那么你可以将标记放在ArrayList中,一旦它们全部被收集,就调用ArrayList对象上的toArray方法。
答案 2 :(得分:0)
我的代码没有使用ArrayList。
import java.util.Scanner;
import java.util.StringTokenizer;
public class Sample {
public static void main(String[] args) {
Scanner sc = new Scanner(System. in );
String line = sc.nextLine();
StringTokenizer st = new StringTokenizer(line);
int len = st.countTokens();
String[] array = new String[len];
for (int idx = 0; idx < len; idx++) {
array[idx] = st.nextToken();
}
for (String str: array) {
System.out.println(str);
}
}
}