2013-05-09 66 views
1

我有一個數據集,我想讀出並排序到數組中,唯一的問題是所有的數據都只用空格分隔。如何讀取和排序僅由空格分隔的數據?

我想使用循環將數據排序到一個大的多維數組中,但由於它只是由空格分隔,所以我完全喪失了功能。

這個數據按年份排序,接着是6個空間,然後是一個月,然後是三個月,然後是那個月的31套數據,其中三個數據是隨後的3個。像這樣:

1974  1 0.00 0.01 

我會想要做這樣的事情:

while(year) 
    //sort into annual array 
     while(month) 
      //sort into monthly array 
       for(each individual data entry) 
        //sort each data entry into each month's array 

很抱歉,如果我的措辭不是很好這裏。提前謝謝了。

+1

你熟悉'Scanner'課堂上提到? – 2013-05-09 19:33:00

+0

String.split()可能也適用。\ – 2013-05-09 19:45:15

回答

2

可能最好的方法是爲您的數據創建一個類,然後使用自定義比較器編寫一個類。

您應該使用Scanner您的數據讀入你的數據類,並存儲在一個列表

public class MyData{ 
    Date date; 
    float data[]; 
} 
List<MyData> data = new ArrayList<MyData>(); 
/// add everything into data 

Collections.sort(data, new Comparator<MyData>(){ 
    @Override 
    public int compare(MyData data1, MyData data2) { 
     // compare on year 
    } 
}); 
// Copy into new List 

Collections.sort(data, new Comparator<MyData>(){ 
    @Override 
    public int compare(MyData data1, MyData data2) { 
     // compare on month 
    } 
}); 
/// keep sorting and copying 
1

看來,Scanner類是你需要在這裏。

Scanner scanner = new Scanner(yourIntputStream);

現在編寫使用scanner.nextInt()或掃描儀提供的其他方法讀取數據的循環。詳細信息請查看API文檔。

0

您可以使用「split」 - 方法將字符串轉換爲數組。例如:

String[] splittedString = yourString.split( ) // six spaces  

然後再將每個ArrayEntry分隔3個空格,依此類推。

0

要獲得4場,你可以可以使用

String sInput = "1974  1 0.00 0.01"; 
String[] fields = sInput.split("\\s+"); 

其中fields[0]將是當年,fields[1]這個月,依此類推。

如果您想處理排序後的數據,可能需要預先加載另一個數組中的所有字段,並將結果存儲在數據中。

+0

這是一個* java *問題,而不是*。NET *問題 – Bohemian 2013-05-09 22:51:58

+0

我沒有注意到。調整了示例。 – lunadir 2013-05-12 21:14:21

0

步驟一:通過分裂提取物對任何數目的空格的數據作爲數組:

String[] words = input.split("\\s+"); 

第二步提取部分:

String year = words[0]; 
String month = words[1]; 
String [] data = Arrays.copyOfRange(words, 2, words.length); 

此代碼迎合個月與任意數量的天。

相關問題