2012-03-28 35 views
2

我想將用戶輸入集合(如{ 1 2 3 4 })作爲字符串拆分爲數組列表,這樣當我打印出數組列表時,它將會閱讀{1, 2, 3, 5}。這是我的代碼到目前爲止。我不確定Scanner.next()方法是如何工作的,但我正在嘗試使用它。這是我的程序的一小部分。其實它就像一開始。使用Scanner.next()將字符串集拆分爲ArrayList

import java.util.Scanner; 
import java.util.ArrayList; 
public class practice { 
    public static void main (String[]args){ 
    Scanner stdIn = new Scanner (System.in); 
    String set; 
    String set2 = ""; 

System.out.print("Enter set:"); 
set = stdIn.nextLine(); 
if(set.charAt(0) == '{'){ 
    for(int i =1; i<set.length(); i++){ 
     set2 += set.charAt(i); 
    } 
} 
else if(set.charAt(1) == '{'){ 
    for(int i = 2; i <set.length();i++){ 
     set2 += set.charAt(i); 
    } 
} 
System.out.print(set2); 


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

while(stdIn.next() != "}"){ 
    set2 = stdIn.next(); 
    array.add(Integer.parseInt(set2)); 
} 
System.out.print(array); 

    } 
} 

回答

1

您應該在String中使用String.split(String)String.replaceAll(String, String)方法來執行很多目前您的代碼。

您可以像用戶輸入stdIn.nextLine();一樣獲得用戶輸入,但之後可以更輕鬆地進行字符串處理。

首先,你應該刪除不必要的字符,最後只是由空格分隔的數字序列。

你可以通過簡單地調用replaceAll方法來做到這一點,並提供正則表達式,這在這種情況下非常簡單。

然後您可以調用String.split方法來查找集合中的每個元素。

String in = stdIn.nextLine(); 
// Need to escape the characters because 
// these characters mean something special in regular expressions 
String filtered = userInput.replaceAll("(\\[\\{\\}\\],"," "); 
String[] numbers = filtered.split("\\s+"); 
ArrayList <Integer> myNumbers = new ArrayList <Integer> (numbers.length); 
for (String number : numbers) 
    myNumbers.add (Integer.parseInt (number)); 

UPDATE

如果您需要使用一臺掃描儀,您可以使用掃描儀已被過濾

Scanner s = new Scanner (filtered); 
ArrayList <Integer> myNumbers = new ArrayList <Integer>(); 
while (s.hasNext()) 
{ 
    myNumbers.add(s.nextInt()); 
} 
+0

顯然他不得不使用掃描儀。 – 2012-03-28 19:06:49

+0

哦...好的。我已經更新了我的答案。 – 2012-03-28 19:44:50

+0

你剛完成他的功課!無論如何,它現在太晚了.. – 2012-03-29 04:50:21

1

也許你應該對字符串使用Java的split方法。

編輯: 如果你需要使用掃描儀,你可能要開始是這樣的:

String input = "foobar"; 
Scanner s = new Scanner(input); 

,然後可能使用一個while循環和hasNext方法上s迭代。在這個循環中,您可能需要使用Java的scanner api中的下一個方法之一來將每個令牌用作字符串。如果您只想打印出來,那麼您並不需要將令牌添加到數組列表中。您可以直接使用System.out.print()。無論如何,它非常值得自己研究並探索掃描儀API。

+0

林應該使用Scanner.next字符串()方法 – Milwaukoholic 2012-03-28 18:53:33

+1

哦。這是作業嗎?也許你可能想把它標記爲家庭作業? – 2012-03-28 18:55:50

+0

哦對不起。即時通訊新的 – Milwaukoholic 2012-03-28 18:59:43

0

你可以採取直「整型」,而不是實際然後通過字符串轉換,如縮短,同時聲明:

while (stdIn.next() != '}') { 
    array.add(stdIn.nextInt()); 
} 

但是,你需要一些錯誤處理,以確保你實際上得到整數以防萬一你的用戶通過別的東西。但是,如果您想要將整數作爲字符串打印,最好使用String數組而不是整數數組。