【发布时间】:2010-07-18 17:00:46
【问题描述】:
我正在为一个类学习 Java 中的文本处理,类中的示例是从文件中读取数据,进行文本处理,将数据(列表)写回文件。我理解这个示例,因为他将每一行读入一个字符串并将该行添加到列表中,然后使用 .split(" ") 和 Collections.sort 对返回其中一个字符串的数据进行排序。但是,如果有逗号和额外的空格,我不知道如何格式化它们。我阅读了正则表达式,但不确定是否需要这样做,因为我们还没有涉及到它并且正在使用 trim() 方法。但是,如果我将 trim() 方法放在实现 Comparator 并传递给 Collections.sort 的类的 compare 方法中,则它不会传递正确格式的字符串,因为 compare 返回一个 int。所以我想我正在寻找一些通用指南来帮助完成这项任务,但并没有完全放弃答案。谢谢。
编辑: 作业是按顺序写列表,删除重复和多余的空格。
public class TextProcess
{
public static void main(String[] args)
{
try {
// get data from class file
List<String> data = TextFileUtils.readTextFile("addressbooktest.txt");
// process data. Really just the same address book that looks like
// firstName, lastName, phone, email
// with the commas, but deleting duplicates, the extra whitespace, and sorting alphabetically
Collections.sort(data, FIRSTNAMECOMPARATOR);
// write to output file
TextFileUtils.writeTextFile(data, "parsedaddressbooktest.txt");
}
catch (IOException e) {
e.printStackTrace();
}
}
private static final FirstNameComparator FIRSTNAMECOMPARATOR = new FirstNameComparator();
}
class FirstNameComparator implements Comparator<String>
{
public int compare(String s1, String s2)
{
String[] st1 = s1.split(",");
String[] st2 = s2.split(",");
String firstName1 = st1[0].toUpperCase().trim();
String lastName1 = st1[1].toUpperCase().trim();
String firstName2 = st2[0].toUpperCase().trim();
String lastName2 = st2[1].toUpperCase().trim();
if (!(firstName1.equals(firstName2)))
return firstName1.compareTo(firstName2);
else
return lastName1.compareTo(lastName2);
}
}
【问题讨论】:
-
与其用文字描述你的代码,不如直接展示给我们。另外,如果我们不知道作业是什么,我们如何帮助完成作业?
-
感谢这次的sn-p,你能用语言总结一下工作流程吗?您是否想说: 1. 从文件中读取。 2. 处理文本 - 即对它们进行排序(排序依据?) 3. 写回文件。 (写什么?)
-
像
// here is what the line below does这样的评论代码将对您和其他人有很大帮助。
标签: java