如何读取和排序仅以空格分隔的数据?

时间:2013-05-09 19:27:46

标签: java arrays sorting

我有一个数据集,我想读出并排序到数组中,唯一的问题是所有数据都只用空格分隔。

我想使用循环将数据排序为一个大的多维数组,但由于它只是以空格分隔,所以我完全失去了。

数据按一年后跟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

很抱歉,如果我的措辞不是很好。非常感谢提前。

6 个答案:

答案 0 :(得分:2)

最好的方法是为您的数据创建一个类,然后使用自定义比较器编写一个排序。

您应该使用Scanner将数据读入Data类,并将其存储在List

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 :(得分:1)

似乎Scanner类就是你需要的。

扫描仪扫描仪=新扫描仪(yourIntputStream);

现在编写使用scanner.nextInt()或扫描仪提供的其他方法读取数据的循环。检查API文档以获取详细信息。

答案 2 :(得分:0)

您可以使用“split”-method将字符串转换为数组。 E.g:

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

然后再将每个ArrayEntry拆分3个空格,依此类推。

答案 3 :(得分:0)

要获得4个字段,您可以使用

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

其中fields[0]为年份,fields[1]为月份,依此类推。

如果您想处理已排序的数据,可能需要在数据的结构中预加载另一个数组中的所有字段。

答案 4 :(得分:0)

第一步:通过拆分任意数量的空格来将数据提取为数组:

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

第二步提取部分:

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

此代码适用于任意天数的月份。

答案 5 :(得分:0)

我认为您正在阅读固定宽度的文件...我可以建议您查看本回答中提到的fixedformat4j Tactics for parsing fixed-width text log in Java