(免责声明:我没有写完编码,所以我一直在使用糟糕的名字 识别事物。)
我有一个名为 PersonIndex 的 PersonObject 的ArrayList。 PersonObject 的参数如下:姓名,年龄,性别,身高。
我要做的是处理列表,并根据姓氏的开头,将其写入不同的文本文件。
因为尝试将三种写入方法组合到一个编写器是不好的尝试,我有三个不同的,然后被调用到单个方法。
该方法如下:
public void fullWriteNames(){
writeNamesA2K();
writeNamesL2R();
writeNamesS2Z();
}
我知道编写器方法的总体布局如下:
String stopper = "stop";
try{
personWriter = new FileWriter(fileName2, true);
personWriter.write(*stuff to write*);
personWriter.close();
}
catch(IOException ioException){
System.out.println("Error.");
}
我遇到的问题是如何使用.write行的if语句来过滤对象。我知道我需要使用.startsWith,但除此之外我一无所知。
任何帮助将不胜感激。如果我在这里留下任何相关的编码,请告诉我。
答案 0 :(得分:0)
由于角色真的只是数字,你可以这样做:
public void fullWriteNames() {
char first = lastname.charAt(0);
if (first >= 'A' && first <= 'K')
writeNamesA2K();
else if (first >= 'L' && first <= 'R')
writeNamesL2R();
else if (first >= 'S' && first <= 'Z')
writeNamesS2Z();
}
我假设lastname
变量是PersonObject
的姓氏。
答案 1 :(得分:0)
您可以使用正则表达式来匹配组
List<String> names = new ArrayList<>(25);
names.add("Apple");
names.add("apple");
names.add("bannas");
names.add("Kings");
names.add("Nov");
names.add("Nov");
names.add("Yak");
for (String name : names) {
if (name.matches("[A-Ka-k].*")) {
System.out.println("[A-K] " + name);
} else if (name.matches("^[L-Rl-r].*")) {
System.out.println("[L-R] " + name);
} else if (name.matches("^[S-Zs-z].*")) {
System.out.println("[S-Z] " + name);
}
}
这可能允许您设置一个可以采用&#34;过滤器&#34;参数并根据过滤器决定做什么
public void writeToFile(List<Person> listOfNames, File fileToWrite, String filter) {
...
}
你可以使用类似的东西打电话......
writeToFile(listOfPeople, fileForGroupAToK, "[A-Ka-k].*");
就个人而言,我可能会根据过滤器生成一组列表,这些列表可能会快一点,然后在整个列表上迭代3次......但那就是我;)