2010-10-22 72 views
0

當我輸入「read 1 2 3 4」時,我想從輸入流中讀取某些內容以存儲在int []中。我該怎麼辦?作爲數組讀取輸入

我不知道該數組的大小,一切都是動態...

下面是當前的代碼:

BufferedReader stdin = new BufferedReader(
new InputStreamReader(System.in)); 
String line = stdin.readLine(); 
StringTokenizer st = new StringTokenizer(line); 
String command = st.nextToken(); 

if (command.equals("read")) { 
    while (st.nextToken() != null) { 
     //my problem is no sure the array size 
    } 
} 
+0

檢查這個[示例](http://www.ensta.fr/~diam/java/online /notes-java/data/arrays/arrays.html)。 – Emil 2010-10-22 05:36:23

回答

0

你要麼使用一個存儲結構的節點,您可以輕鬆地一個接一個地追加,或者,如果您確實必須使用數組,則需要定期分配空間,因爲這是必要的。

1

你需要構建一些東西來解析輸入流。假設它的字面意思是不復雜的,你已經表明你需要做的第一件事就是讓行出InputStream,可以是這樣做的:

// InputStream in = ...; 

// read and accrue characters until the linebreak 
StringBuilder sb = new StringBuilder(); 
int c; 
while((c = in.read()) != -1 && c != '\n'){ 
    sb.append(c); 
} 

String line = sb.toString(); 

或者你可以使用一個由建議BufferedReader(評論):

BufferedReader rdr = new BufferedReader(new InputStreamReader(in)); 
String line = rdr.readLine(); 

一旦你有一條線來處理,你需要將其分割成塊,然後處理塊放入所需的陣列:

// now process the whole input 
String[] parts = line.split("\\s"); 

// only if the direction is to read the input 
if("read".equals(parts[0])){ 
    // create an array to hold the ints 
    // note that we dynamically size the array based on the 
    // the length of `parts`, which contains an array of the form 
    // ["read", "1", "2", "3", ...], so it has size 1 more than required 
    // to hold the integers, thus, we create a new array of 
    // same size as `parts`, less 1. 
    int[] inputInts = new int[parts.length-1]; 

    // iterate through the string pieces we have 
    for(int i = 1; i < parts.length; i++){ 
     // and convert them to integers. 
     inputInts[i-1] = Integer.parseInt(parts[i]); 
    } 
} 

我小號這些方法中的一些可能會拋出異常(至少有readparseInt),我將把這些作爲練習來處理。

+0

您可以通過使用BufferedReader的readLine()方法來減少一些工作。 – shinkou 2010-10-22 02:43:51

+0

@shinkou,當然,這不是很重要,但我會幽默你。 – 2010-10-22 02:48:02

0

解析 - 從你的字符串數據和關鍵字,然後將它推入這樣的:

public static Integer[] StringToIntVec(String aValue) 
{ 

    ArrayList<Integer> aTransit = new ArrayList<Integer>(); 

    for (String aString : aValue.split("\\ ")) 
    { 
     aTransit.add(Integer.parseInt(aString)); 

    } 

    return aTransit.toArray(new Integer[ 0 ]); 

} 
相關問題