我有一个数据集,我想读出并排序到数组中,唯一的问题是所有数据都只用空格分隔。
我想使用循环将数据排序为一个大的多维数组,但由于它只是以空格分隔,所以我完全失去了。
数据按一年后跟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
很抱歉,如果我的措辞不是很好。非常感谢提前。
答案 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