这里的解决方案取决于你想要做什么,我只能猜测可能没有提供更多信息。正如Thomas Bohm在他的评论中所说的那样,这取决于这里“正确”的含义。我会为一些可能性提供帮助;假设每个示例都使用纯文本文件。
一种可能性是每个文件行都带有某些前缀。考虑这个例子:
Name: John Doe
Phone: (555) 555-5555
Email: [email protected]
假设每个条目应该像这样格式化,每个单独的条目之间有一条空行。在您处理的文件中,每个条目都包含名称,电话号码和电子邮件,但不一定按正确顺序排列。
在这种情况下,您希望创建一个类(让我们在此示例中将其命名为Entry)来存储每个条目中的信息。它的每个实例都应该有三个字符串变量 - 名称,电话和电子邮件。这样,你会想在你的主类,以创建一个ArrayList,并创建每个条目这样(注意SC是扫描仪读取.txt文件):
ArrayList<Entry> entries = new ArrayList<>();
String[] info = new String[3];
String name;
String phone;
String email;
while (sc.hasNextLine()) {
do {
info[0] = sc.nextLine();
} while (!sc.nextLine().isEmpty());
// this ensures that empty lines will not be treated as if they contained information
info[1] = sc.nextLine();
info[2] = sc.nextLine();
// all three lines in the entry have now been assigned to Strings
for (int i=0; i<3; i++) {
if (info[i].startsWith("Name") {
name = info[i];
} else if (info[i].startsWith("Phone") {
phone = info[i];
} else if (info[i].startsWith("Email") {
email = info[i];
}
}
entries.add(new Entry(name, phone, email));
}
然后,您可能要编写中的一个toString()
方法以String形式返回Entry的Entry类以正确的方式格式化,然后在主类中编写一个方法来迭代ArrayList,并将每个内容写入文件。请记住,假设文本文件中的每个条目都包含必需的三条信息,每条信息都在单独的连续行上,并且每个前缀都包含在内(使用正确的拼写和大写形式)。如果这三行中的任何一行被忽略或没有正确的前缀,输出文件将以不正确的信息结束。
对于第二个可能的例子,考虑的情况下,和以前一样,但没有在每行开始的前缀,因为这样的:
John Doe
(555) 555-5555
[email protected]
如果是这样的话,我会建议用自己熟悉常用表达。此代码与以前的代码非常相似,只是条件语句将整个String info [i]与以下正则表达式匹配:
名称:^[A-Z][a-z]+ ([A-Z][a-z]*)?[A-Z][a-z]+$
(允许名字,可选中间名或初始,和姓氏,在适当的大写,空格和标点符号)
电话:^\(\d{3}\) \d{3}-\d{4}$
(匹配(555的电话号码)555-5555格式)
电话:^\(?(\d{3})?\W{0,2}\d{3}-?\d{4}$
(匹配任何7位或10位电话号码;括号,间距和连字可选)
电子邮件:^\[email protected]\w+\..+$
(匹配任何有效的电子邮件地址)
然后,您可以测试字符串给定的正则表达式像这样的比赛:
info[i].matches("^\[email protected]\w+\..+$")
这将返回true
如果info[i]
是一个有效的电子邮件地址;否则,false
。
现在,让我们假设你需要你的程序做一些完全不同的事情,比如将文件中的行按字母顺序排列。在这种情况下,您需要创建一个ArrayList,并将该行中的每一行作为String存储在此ArrayList中。然后您将按字母顺序对此列表进行排序,并将排序后的列表写入文件。
我现在没有时间为这种情况编写代码,但如果这是您的目标,我可以在稍后帮助您。
“正确”在你的语境中意味着什么?你想排序线或什么?你能给个例子吗? 在我看来,如果您想对行进行排序(例如按字母顺序排列或通过行首的索引或其他内容),则可以使用Java轻松完成。 –
*“我的问题是:对于文件操作(如上所述),Java是最好的选择?” - 这是一个意见问题 – MadProgrammer
文件有多大?什么是“正确”的顺序? – radai