Java-Как распечатать имена вместе с отсортированными датами? - PullRequest
0 голосов
/ 06 марта 2012

У меня есть файл с именами и датами рождения. Я сопоставляю 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);
}}

Я могу распечатать отсортированные даты, но как я могу напечатать имена вместе с датами. спасибо

Ответы [ 2 ]

4 голосов
/ 06 марта 2012

Вы можете сделать это:

while (mat.find()) {
    System.out.println(mat.group());
}

Отредактировано

Извините, я не заметил ваш вопрос.Для сохранения результатов:

import java.util.*;

...

List<String> matches = new ArrayList<String>();
while (mat.find()) {
    matches.add(mat.group());
}
2 голосов
/ 06 марта 2012

Вы можете просто создать 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());
    }
}

Нужно иметь в виду, что вы планируете сортировать их. Вы, вероятно, можете избежать использования компаратора String и использования Collections.sort(birthDates). В случае, если вам нужен объект Date, вы можете использовать m.group() и разобрать его в объект Date. Затем просто измените тип ArrayList на ArrayList<Date>.

Редактировать: Если вам действительно нужен массив, вы можете использовать .toArray(T[]) в интерфейсе List, чтобы изменить его.

String[] birthDatesArray = birthDates.toArray(new String[birthDates.size()]);
...