我有一个包含名称和出生日期的文件。我正在用正则表达式匹配BateOfBirths,我想把它们存储到一个数组中,这样我就可以对日期进行排序。我所做的是
文本文件:
name1 dd-MM-yyyy
name2 dd-MM-yyyy
namw3 dd-MM-yyyy
name4 dd-MM-yyyy
我的代码:
import java.io.*;
import java.util.regex.Pattern;
import java.util.regex.Matcher;
import java.util.Scanner;
import java.util.*;
import java.text.*;
class SortDate{
public static void main(String args[]) throws IOException {
BufferedReader br=new BufferedReader(new FileReader("dates.txt"));
File file = new File("dates.txt");
Scanner scanner = new Scanner(file);
int count = 0;
while (scanner.hasNextLine()) {
String line = scanner.nextLine();
count++;
}
String[] names= new String[count];
List<Date> birthDates = new ArrayList<Date>();
for(int x=0;x<count;x++)
{
names[x]=br.readLine();
}
String Dates="\d\d-\d\d-\d\d\d\d";
Pattern pat=Pattern.compile(Dates);
for(String s:names){
try {
Matcher mat=pat.matcher(s);
while(mat.find()){
String str=mat.group();
DateFormat formatter ;
Date date ;
formatter = new SimpleDateFormat("dd-MM-yyyy");
date = (Date)formatter.parse(str);
birthDates.add(date);
}
}catch (ParseException e)
{System.out.println("Exception :"+e); } }
Collections.sort(birthDates);
System.out.println(names+birthDates);
}}
我可以打印排序后的日期,但如何打印姓名和日期。感谢
您可以这样做:
while (mat.find()) {
System.out.println(mat.group());
}
已编辑
很抱歉我没有注意到你的问题。保存结果:
import java.util.*;
...
List<String> matches = new ArrayList<String>();
while (mat.find()) {
matches.add(mat.group());
}
您只需创建一个ArrayList
并将其存储在其中。
List<String> birthDates = new ArrayList<String>();
Pattern datePattern = Pattern.compile("\d\d-\d\d-\d\d\d\d");
for(String name : names) {
Matcher m = datePattern.matcher(name);
while(m.find()) {
birthDates.add(m.group());
}
}
需要记住的一件事是,你计划对这些进行分类。您可能不需要使用字符串比较器和Collections.sort(birthDates)
。在需要Date
对象的情况下,可以使用m.group()
并将其解析为Date
对象。然后,只需将ArrayList
类型更改为ArrayList<Date>
即可。
编辑:如果真的需要它是一个数组,那么可以使用List
接口中的.toArray(T[])
来更改它。
String[] birthDatesArray = birthDates.toArray(new String[birthDates.size()]);