我有一个mydata.txt,我想在其中单独读取信息。
第一行保存为";动物园编号"动物编号";
第2行至第5行保存为"0";矩阵中动物的数据";
第6排保存为狗";数字"食欲"重量"高度";
2 83
30 50 21 42 0 3
55 56 78 34 2 1
87 76 23 21 3 2
88 22 56 78 32 8
dog 23 79 67 21
然而,我按照下面的方式编写的代码,我的代码只能将mydata.txt中的所有内容重新加载到字符串中。但我想把这些信息分别保存到单独的字符串(对于那个矩阵)和变量(例如,狗的数字,狗的蓝宝石…)中。我该怎么做?
private void readFile(String fileName){
try{
File file = new File("myData.txt");
FileReader fileReader = new FileReader(file);
BufferedReader bufferedReader = new BufferedReader(fileReader);
StringBuffer stringBuffer=new StringBuffer();
String line = bufferedReader.readLine();
while ((line = bufferedReader.readLine()) != null) {
stringBuffer.append(line);
stringBuffer.append("n");
}
fileReader.close();
bufferedReader.close();
System.out.println("Contents of File: ");
System.out.println(stringBuffer.toString());
}catch (IOException e){
System.out.println(e.getMessage());
}
}
这里应该使用String类中的split
方法。
String[] rowOne = line.split(" ");
int zooNumber = Integer.valueOf(rowOne[0]);
int animalNumber = Integer.valueOf(rowOne[1]);
因此,当您使用" "
进行拆分时,将为用空格拆分的字符串提供数组。然后阅读一个索引一个索引会给你想要的值。
更新的答案:您可以按以下方式逐行获取值:
int i = 1;
while ((line = bufferedReader.readLine()) != null) {
if (i == 1) {
String[] rowOne = line.split(" ");
int zooNumber = Integer.valueOf(rowOne[0]);
int animalNumber = Integer.valueOf(rowOne[1]);
} else if(i > 1 && i < 6) {
String[] midRows = line.split(" ");
// retrieve values at index 0, 1, 2, 3, 4 ,5
// First 2nd Row
// Index 0 : 30
// Index 1 : 50
//,...
} else if(i == 6) {
String[] midRows = line.split(" ");
// retrieve values at index 0, 1, 2, 3, 4
// First 6th Row
// Index 0 : dog
// Index 1 : 23
//,...
} else {
break;
}
i++;
}
您可以这样设置myData.txt文件:
zoo_number 2,animal_number 83
key1 30,key2 50…
…
animal dog,dog_appetite 23,。。。
然后,您要做的是迭代每一行,如下所示:
import java.util.*;
import java.io.*;
public class App{
public static void main(String[] args) throws IOException{
File file = new File("myData.txt");
FileReader fileReader = new FileReader(file);
Scanner sc = new Scanner(fileReader);
Map<String, String> map = new HashMap<String, String>();
while(sc.hasNextLine()){
String[] inputText = sc.nextLine().trim().split(",");
for(String sentence : inputText){//every key_Value pair in a line
String key = sentence.split(" ")[0];//key, value in key_value pair
String value = sentence.split(" ")[1];
map.put(key, value);
}
}
System.out.println(map);
sc.close();
}
}
输出:{key1=30,key2=50,number=23,zooNumber=2,animal=dog,animal=83}
保持头脑清醒地图不接受重复密钥