使用过滤器将对象的 ArrayList 写入文本文件
Writing ArrayList of objects to textfile using filter
(免责声明:我还没有写完编码,所以我一直在使用糟糕的名字来
识别事物。)
我有一个名为 PersonIndex 的 PersonObject 的 ArrayList。
PersonObject的参数如下:姓名、年龄、性别、身高。
我想做的是处理列表,并根据姓氏的开头,将其写入不同的文本文件。
因为尝试将三个写入方法组合到一个 writer 中是一种不好的品味,所以我有三个不同的方法,然后将它们调用到一个方法中。
该方法如下:
public void fullWriteNames(){
writeNamesA2K();
writeNamesL2R();
writeNamesS2Z();
}
我知道writer方法的大致布局如下:
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,但除此之外我一无所知。
如有任何帮助,我们将不胜感激。如果我在这里遗漏了任何相关的编码,请告诉我。
由于字符实际上只是数字,您可以这样做:
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
的姓氏。
您可以使用正则表达式来匹配组
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);
}
}
这可能允许您设置一个写入方法,该方法可以采用 "filter" 参数并根据过滤器
决定要做什么
public void writeToFile(List<Person> listOfNames, File fileToWrite, String filter) {
...
}
您可以使用类似...
writeToFile(listOfPeople, fileForGroupAToK, "[A-Ka-k].*");
不过,就我个人而言,我可能会倾向于根据过滤器生成列表组,这可能比遍历整个列表 3 次要快一些...但这就是我 ;)
(免责声明:我还没有写完编码,所以我一直在使用糟糕的名字来 识别事物。)
我有一个名为 PersonIndex 的 PersonObject 的 ArrayList。 PersonObject的参数如下:姓名、年龄、性别、身高。
我想做的是处理列表,并根据姓氏的开头,将其写入不同的文本文件。
因为尝试将三个写入方法组合到一个 writer 中是一种不好的品味,所以我有三个不同的方法,然后将它们调用到一个方法中。
该方法如下:
public void fullWriteNames(){
writeNamesA2K();
writeNamesL2R();
writeNamesS2Z();
}
我知道writer方法的大致布局如下:
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,但除此之外我一无所知。
如有任何帮助,我们将不胜感激。如果我在这里遗漏了任何相关的编码,请告诉我。
由于字符实际上只是数字,您可以这样做:
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
的姓氏。
您可以使用正则表达式来匹配组
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);
}
}
这可能允许您设置一个写入方法,该方法可以采用 "filter" 参数并根据过滤器
决定要做什么public void writeToFile(List<Person> listOfNames, File fileToWrite, String filter) {
...
}
您可以使用类似...
writeToFile(listOfPeople, fileForGroupAToK, "[A-Ka-k].*");
不过,就我个人而言,我可能会倾向于根据过滤器生成列表组,这可能比遍历整个列表 3 次要快一些...但这就是我 ;)