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

对不起,如果我的措辞在这里不是很好。提前谢谢了。

4

6 回答 6

2

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

您应该使用 aScanner将数据读入 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
于 2013-05-09T19:42:10.517 回答
1

看来这个Scanner类是你需要的。

扫描仪扫描仪 = 新扫描仪(您的输入流);

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

于 2013-05-09T19:32:55.067 回答
0

您可以使用“拆分”方法将字符串转换为数组。例如:

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

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

于 2013-05-09T19:34:41.273 回答
0

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

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

fields[0]年、fields[1]月等在哪里。

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

于 2013-05-09T19:45:18.740 回答
0

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

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

第二步提取零件:

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

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

于 2013-05-09T22:57:53.887 回答
0

我认为您正在阅读一个固定宽度的文件...我可以建议您查看此答案中提到的 fixedformat4j用于在 Java 中解析固定宽度文本日志的策略

于 2013-05-13T01:28:27.360 回答