我正在编写我的第一个Android应用程序,所以我是一个新手,对于将文件中的数据转换为数组的最佳方式感到困惑。我正在尝试从资源原始txt文件中获取数据并将其存储在数组或ArrayList
中,以便我可以执行excel样式的vlookup。数据文件(data_file.txt
)的大小为28,2,第一列有一个int,第二列有一个浮点,通过这样的空格分隔:
我希望能够查找1000的值并获得-1.6。
首先,我应该使用多维对象数组还是ArrayList
,我使用哪一个很重要?我需要保持第二列数据类型为float,并且如果可能的话,希望保持第一列数据类型为int。
我正在寻找有关代码和/或我需要研究的方法的提示。
干杯,
Airfix膨胀
4月3日更新
我很确定地图不是我想要的。我一直在研究下面的代码。看起来除了Scanner scan = new Scanner(new FileReader(file));
我得到一个“无法解析文件变量的构造函数FileReader(int)
之外它会起作用。显然它将我的文件视为一个int,当它确实只是一个普通的txt文件时在示例中显示。仍在寻找帮助以完成。谢谢:))
public void fuelIndex (){
Object file = (getResources().getIdentifier("fuel_index",
"raw", getPackageName()));
Scanner scan = new Scanner(new FileReader(file));
Object[][] fuelIndexData = new String[28][2];
int i = 0;
while(scan.hasNextLine()){
fuelIndexData[i] = scan.nextLine().split("\\s+");
i++;
}
//loops through the file and splits on any space
for (int row = 0; row < fuelIndexData.length; row++) {
for (int col = 0; col < fuelIndexData[0].length; col++) {
if(fuelIndexData[row][col] != null){
System.out.print(fuelIndexData[row][col] + " " );
}
}
if(fuelIndexData[row][0] != null){
System.out.print("\n");
}
}
}
答案 0 :(得分:1)
这似乎是Map
而非List
的用例。注意:在Java中有两种浮点数据类型。您提到要将值存储为float,但我假设您只是意味着将使用浮点表示存储数据。所以,我假设我们在这里与Double
合作。
可以使用Map
将Integer
键映射到Double
值,就像使用map.get(1000)
获取值1.6一样。
以下是一些要演示的代码:
Map<Integer,Double> map = new HashMap<>();
map.put(1000, 1.6);
map.put(500, 1.3);
map.put(10000, 1.7);
System.out.println(map.get(10000));
System.out.println(map.get(99));
这会产生以下输出:
1.7
null
在第一次调用中返回了 1.7,因为它是10000键的值。在第二次调用中返回null
,因为99不在keySet中。 JavaDoc for the Map interface有更多详细信息。
答案 1 :(得分:1)
如果整数是唯一的并且用于标识浮点值,则应使用HashMap,如果要按列表中的位置建立索引并且允许整数值具有重复项,则可以使用{ {3}}使用一些存储两个值的对象ContainerObject
。
<强> HashMap中强>
Map<Integer, Float> myMap = new HashMap<Integer, Float>();
myMap.put(500, -1.3f);
myMap.put(1000, -1.6f);
myMap.put(10000, -1.7f);
<强>的ArrayList 强>
List<ContainerObject> myList = new ArrayList<ContainerObject>();
myList.add(new ContainerObject(500, -1.3f));
myList.add(new ContainerObject(1000, -1.6f));
myList.add(new ContainerObject(1000, -1.7f));