我正在尝试理解类的文件I / O,我理解基础知识,但是我无法理解如何管理输入文件中的输出,输入文件的格式如下:
BusinessContact:名字=尼古拉斯; lastName的= Tsantalis SocialNetworkAccount:socialNetworkType = SKYPE;帐户ID = tsantalis
基本上我的联系人(BusinessContact扩展自来自)对象具有firstName,lastName和middleName的属性, 它还有对象属性,如SocialNetworkAccount等......
我不需要解释我的对象是如何格式化的,那些已经完成的所有我想要了解的是我的file.txt如何输入到我的程序中以将我的联系人设置为BusinessContact以及设置相应的名字和姓氏,
由于
编辑:我特意告诉我使用拆分方法,但我也被告知(1)创建一个通用的方法来解析属性,返回一个映射,其中键对应于attributeNames,值为attributeValues(以这种方式可以重用相同的代码)
答案 0 :(得分:2)
您可以将Scanner
类与不同的分隔符一起使用,如下所示:
Scanner in = new Scanner(/**source*/);
in.useDelimiter(":");
String firstName, lastName;
String firstWord = in.next();
Scanner nameScanner = new Scanner(in.nextLine());
nameScanner.useDelimiter(";");
firstName = getName(new Scanner(nameScanner.next()));
lastName = getName(new Scanner(nameScanner.next()));
private String getName(Scanner nameScanner){
nameScanner.useDelimiter("=");
String nameTitle = nameScanner.next();
return nameScanner.next();
}
通过这种方式,您可以按如下方式阅读以下部分的文本:
BusinessContact
: firstName=Nikolaos;lastName=Tsantalis
firstName=Nikolaos
的 强> lastName=Tsantalis
firstName
= Nikolaos
; lastName
= Tsantalis
我希望这是有道理的。
注意:此代码仅读取第一行。如果你想阅读第二个我猜它不难修改它。如果你也想要第二行,或者如果你有任何问题,请告诉我,我会更新答案。
编辑:我刚注意到每一行的格式都是一样的,所以基本上你可以为每一行使用相同的代码。也许是在一个循环中:
Scanner input = new Scanner(/**source*/);
while(input.hasNextLine()){
Scanner in = new Scanner(input.nextLine());
...
....
//The above code
}
String.split()方法:
Scanner in = new Scanner(System.in);
String[] first = in.nextLine().split(":");
String[] second = first[1].split(";");
String[] thirdA = second[0].split("=");
String[] thirdB = second[1].split("=");
for(int i = 0; i < thirdA.length; i++){
System.out.println(thirdA[i]);
System.out.println(thirdB[i]);
}
对于第一行,上面的代码将打印出来:
firstName
lastName
Nikolaos
Tsantalis
希望这有帮助。
答案 1 :(得分:0)
您可以使用正则表达式,但您可能会对String.split感觉更舒服:在“:”上拆分并获取标签,将第二部分拆分为“;”获取属性,然后将每个属性拆分为“=”以获取密钥和值。