创建一个长度由用户输入确定的字符串数组

时间:2015-06-10 02:04:41

标签: java arrays string stdin

我正在尝试创建一个从标准输入读取字符串标记的数组,并将它们放在一个数组中,然后将这些单词输出,直到它到达特定的单词。例如,让我们说我希望我的数组读取一系列单词,直到它达到“#34; okay"从std输入,打印出每个单词,然后在打印出来之前终止"好的"。这个数组的长度是未知的,所以我对如何做到这一点很困惑。

     String s  = sc.next();
     String[] copy = new String[???];

     for( int i = 0; i < copy.length; i++ ){
           copy[i] = sc.next();     
     }

3 个答案:

答案 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);
        }
    }
}