2014-01-22 154 views
-2

給定一個包含由空格或逗號分隔的數字的字符串,如何將數字提取到數組中?一個警告是我不確定是否它會把事情分成太多的部分,如果我試圖分割空白或逗號。從空格或逗號分隔的字符串中獲取數字

Scanner sc = Scanner.(System.IN); 
String input = sc.nextLine(); 
double numbers[] = (double)input.split(",|\s"); 

input的一個例子是

4 5 9 

2,3,7 

8,2 1 

5, 3, 4, 5 

,結果應該是一個包含分配給該數組的元素的每個號碼的數組。但以下不應該被允許
4,,2
,1,2,3
4,5,

但是用戶可能犯了一個錯誤輸入的東西不是一個字母(而不是1,例如輸入「Q」),我想用trycatch但我不確定這是從.split()返回一個數組以來的樣子。

+1

的字符串分割()返回String [],這是有據可查的..有什麼困惑? – sanbhat

+0

@sanbhat我知道那是什麼問題? – Celeritas

+0

from your code expected you double [],所以它更好地重申你的問題,可能的輸入和期望的輸出清晰 – sanbhat

回答

2

分裂任意數量的空格或逗號,然後分析每一個產生字符串轉換成數字:

String[] numberParts = input.split("[\\s,]+"); 
double[] doubles = new double[numberParts.length]; 
int i=0; 
for (String part : numberParts) { 
    double value = Double.parseDouble(part); 
    doubles[i++] = value; 
} 
+0

您能否解釋[\\ s,] +背後的邏輯? – Celeritas

+0

@Celeritas - [\\ s,]是一個由所有空白字符(空格,製表符等)和逗號字符組成的字符類。 X +表示X,一次或多次。其含義是一個或多個空格或逗號字符。欲瞭解更多信息,請參閱模式的javadoc - http://docs.oracle.com/javase/7/docs/api/java/util/regex/Pattern.html – radai

+0

謝謝,有一件事不清楚爲什麼有兩個斜線? \ s匹配空格,所以第一個斜槓是做什麼的? \\是一個反斜槓(\),那麼正則表達式引擎如何知道我們想匹配空白而不是反斜槓? – Celeritas

0

不知道輸入的到底是什麼或者格式,但是從你剛纔所描述的,你將不得不使用split(「」)/ split(「,」)函數的組合,然後通過Double.parseDouble(「1234」)將字符串轉換爲double。

0

您可以使用這樣的事情:

String line="1 2 3 55,56 , 8989 , 88.00 , -76.08 , -6 , +4"; 
String REGEX=" |,"; 
String res[]=line.split(REGEX); 
double numbers[]=new double[res.length]; 
int i=0; 
for(String val:res){ 
    if(!val.isEmpty()&& val.matches("[+-]?\\d+(\\.\\d+)?")) 
     numbers[i++]=Double.parseDouble(val); 
} 
for(int j=0;j<i;j++){ 
    System.out.println(numbers[j]); 
} 

輸出

1.0 
2.0 
3.0 
55.0 
56.0 
8989.0 
88.0 
-76.08 
-6.0 
4.0 
2

如何替換所有非數字第一(除分隔符)?最好將分離器設置爲1個固定值。

你可以嘗試這樣的:

//replace ',' with 'space' so that you only have 1 type of separator 
input=input.replaceAll(","," ").replaceAll("[[email protected]#.:;$%?|^\\&*/()+=-]+",""); 
double numbers[] = (double)input.split("\\s"); //or split(" ")