我有一个名字和DateOfbirth的文件。我将BateOfBirth与正则表达式匹配,我想将它们存储到一个数组中,以便我可以对日期进行排序。我所做的是
文本文件:
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);
}}
我可以打印已排序的日期,但如何打印名称和日期。感谢
答案 0 :(得分:4)
你可以这样做:
while (mat.find()) {
System.out.println(mat.group());
}
<强>被修改强>
对不起,我没有注意到你的问题。要保存结果:
import java.util.*;
...
List<String> matches = new ArrayList<String>();
while (mat.find()) {
matches.add(mat.group());
}
答案 1 :(得分:2)
您只需创建一个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>
。
编辑:如果你真的需要它成为一个数组,那么你可以使用.toArray(T[])
界面中的List
进行更改。
String[] birthDatesArray = birthDates.toArray(new String[birthDates.size()]);