有一个文本文件,我使用拆分方法来剪切。一切都没关系,除了格式化我有问题。预期的输出格式:
Ime:John,Prezime:Davidson,Datum rodjenja:05.maj.1988,Mesto rodjenja:贝尔格莱德
日期必须为“05.may.1988”。相反,我将其视为输入文件中的05051988
。
我的错误在哪里?什么是解决方案?
Persons person = new Persons();
String text = "John.Davidson/05051988/Belgrade Michael.Barton/01011968/Krakov Ivan.Perkinson/23051986/Moscow";
String[] valami = text.split("[ ./]+");
for(int i=0; i < valami.length; i+=4) {
person.name = valami[i];
person.lastName = valami[i+1];
person.dateBirth = valami[i+2];
person.Birthplace = valami[i+3];
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("ddMMyyyy");
LocalDate ld = LocalDate.parse(dateBirth, dtf) ;
System.out.println(person);
}
人类:
@Override
public String toString () {
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("dd.MMM.yyyy.");
String s = dateBirth.format(dtf);
return "Ime: " + this.name + " , "
+ "Prezime: " + this.lastName + " , "
+ "Datum rodjenja: " + this.dateBirth + " , "
+ "Mesto rodjenja: " + this.Birthplace;
}
答案 0 :(得分:2)
根据我的摘要,您的出生日期与输入格式相同,例如05051988
,因为以下问题:
LocalDate
,但从未将LocalDate
保存到人物对象中,因此永远不会使用它。toString()
中,您尝试将日期格式化为字符串s
,但由于dateBirth
是字符串,而不是LocalDate
,因此无效。此外,您还没有使用s
。要解决我建议的问题:
在Persons
声明dateBirth
a LocalDate
:
private LocalDate dateBirth;
LocalDate
对您的模型更好。字符串可用于读取数据并将其呈现给用户。您可以添加便利设置器,以便可以从拆分输入中存储字符串:
private static DateTimeFormatter dtf = DateTimeFormatter.ofPattern("ddMMyyyy");
private void setDateBirth(String dateBirthString) {
this.dateBirth = LocalDate.parse(dateBirthString, dtf);
}
这样打电话:
person.setDateBirth(valami[i+2]);
现在在toString
中,您可以将日期格式化为字符串:
return "Ime: " + this.name + " , "
+ "Prezime: " + this.lastName + " , "
+ "Datum rodjenja: " + this.dateBirth.format(dtf) + " , "
+ "Mesto rodjenja: " + this.birthplace;
您可能还想告诉格式化程序使用哪个语言环境,例如:
DateTimeFormatter dtf
= DateTimeFormatter.ofPattern("dd.MMM.yyyy.", Locale.forLanguageTag("bs"));
通过上述更改,您的代码段会打印出来:
Ime: John , Prezime: Davidson , Datum rodjenja: 05.maj.1988. , Mesto rodjenja: Belgrade
Ime: Michael , Prezime: Barton , Datum rodjenja: 01.jan.1968. , Mesto rodjenja: Krakov
Ime: Ivan , Prezime: Perkinson , Datum rodjenja: 23.maj.1986. , Mesto rodjenja: Moscow
进一步的建议:
Person
,因为班级的一个对象只代表一个人。答案 1 :(得分:1)
您需要将日期字符串格式化为LocalDate,然后将其格式化为所需的字符串模式。见API Docks for parsing and formatting here
private static final DateTimeFormatter BIRTDATE_FORMAT = DateTimeFormatter.ofPattern("dd.MMMM.yyyy");
private static DateTimeFormatter dtf = DateTimeFormatter.ofPattern("ddMMyyyy");
person.dateBirth = LocalDate.parse(valami[i+2], dtf).format(BIRTDATE_FORMAT);
将打印:
Ime: John , Prezime: Davidson , Datum rodjenja: 05.May.1988 , Mesto rodjenja: Belgrade