我希望我能有一些很好的建议,我可以在这里解决这个问题:
我有这个带有地点和名字的文本文件 - 名称详细信息表示该人访问过的地点:
Place: New York
Place: London
Place: Paris
Place: Hongkong
1. Name: John
1. Name detail: London
1. Name detail: Paris
1. Name detail: Hongkong
2. Name: Sarah
2. Name detail: London
3. Name: David
3. Name detail: New York
3. Name detail: Paris
这是我的代码的一部分。
private ArrayList<Place> places = new ArrayList<>();
private ArrayList<Name> names = new ArrayList<>();
public void load(String fileName) throws FileNotFoundException {
ArrayList<Place> place = places;
BufferedReader br = new BufferedReader(new FileReader(fileName));
int nameCounter = 1;
int nameDetailCounter = 1;
String text;
try {
while ((text = br.readLine()) != null) {
if (text.contains("Place:")) {
text = text.replaceAll("Place:", "");
places.add(new Place(text));
} else if (text.contains(nameCounter + ". Name:")) {
text = text.replaceAll(nameCounter + ". Name:", "");
names.add(new Name(text, ""));
nameCounter ++;
}
//starting from here!
else if (text.contains(nameDetailCounter + ". Name detail:")) {
text = text.replaceAll(nameDetailCounter + ". Name detail:", "");
for (Name name : names) {
Name nameDetails = findName(name.getName());
Place placeDetails = findPlace(text);
nameDetails.addName(placeDetails);
}
nameDetailCounter ++;
}
}
} catch (Exception e) {
System.err.println("Error: " + e.getMessage());
}
}
我的想法是选择所有“1”。首先从文本文件中将其添加到数组中,继续使用所有“2”。并将其添加到数组中,依此类推。
我尝试了很多方法,但它没有在“1”的开头添加所有Name详细信息。在数组中。感谢任何新的想法或建议,谢谢!
答案 0 :(得分:0)
拥有String name
和List<Place> places
的Traveler类,而不是拥有Name类?然后,您可以在Traveler类上使用方法add(Place p)
。
答案 1 :(得分:0)
最好使用正则表达式来提取行上的数字,而不是试图跟踪/猜测它(见下文)。
这是一个经过测试的代码重新创建,因为你引用了一些你没有提供的类......但是这应该有所帮助:
public static String getMatch(final String pattern, final String content) {
Pattern r = Pattern.compile(pattern);
Matcher m = r.matcher(content);
if (m.find()) {
return m.group(1);
} else {
return "";
}
}
public static void load(String fileName) throws FileNotFoundException {
List<String> places = new ArrayList<String>();
List<String> names = new ArrayList<String>();
List<String> nameDetails = new ArrayList<String>();
BufferedReader br = new BufferedReader(new FileReader(fileName));
String text;
String lastName = "";
try {
while ((text = br.readLine()) != null) {
// extract num from start of line or empty if none..
String num = getMatch("^([0-9]+)\\.", text);
if (text.contains("Place:")) {
text = text.replaceAll("Place:", "");
places.add(text);
} else if (text.contains(num + ". Name:")) {
text = text.replaceAll(num + ". Name:", "");
names.add(text);
lastName = text;
} else if (text.contains(num + ". Name detail:")) {
text = text.replaceAll(num + ". Name detail:", "");
nameDetails.add(lastName + " had " + text);
}
}
} catch (Exception e) {
System.err.println("Error: " + e.getMessage());
}
System.out.println("Places:" + places);
System.out.println("Names:" + names);
System.out.println("Name Details:" + nameDetails);
}