2013-05-09 2 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'? –

+0

String.split(), вероятно, будет работать. \ –

ответ

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 - это то, что вам нужно здесь.

Сканер сканер = новый сканер (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

+0

я не заметил. Скорректированный пример. – lunadir

0

Шаг один: Извлечение данных в виде массива путем разделения на любое количество пробелов:

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

Шаг два извлечения частей:

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

Этот код обслуживает в течение нескольких месяцев с любым количеством дней.

Смежные вопросы