从文件中读取数据并解析
Read data from file and parse it
我尝试从这个文件中读取数据 txt
所以稍后我可以获得例如最大的 ID 或最近的访问日期等:
`Id_doctor Id_patient Date_visit
23 124 2006-12-13
23 172 2006-1-25
23 191 2006-2-1
23 191 2006-9-26
23 207 2006-9-25
23 252 2006-3-6
23 272 2006-10-26
23 272 2007-2-13
23 291 2006-1-9
23 291 2006-6-6
23 416 2006-1-7
25 100 2006-8-4
25 135 2006-9-24
25 135 2007-4-7
25 248 2006-5-26
26 238 2006-8-2
26 238 2007-3-12
26 249 2006-10-19
26 401 2006-4-9
28 111 2006-2-3
28 161 2006-10-15
28 209 2007-4-1
28 246 2006-7-17
28 246 2006-9-27
`
这是我为 txt 文件创建的 class :
import java.time.LocalDate;
public class Visit {
private int doctorId;
private int patientId;
private LocalDate visitDate;
public Visit(int doctorId, int patientId, LocalDate visitDate) {
this.doctorId = doctorId;
this.patientId = patientId;
this.visitDate = visitDate;
}
public int getDoctorId() {
return doctorId;
}
public void setDoctorId(int doctorId) {
this.doctorId = doctorId;
}
public int getPatientId() {
return patientId;
}
public void setPatientId(int patientId) {
this.patientId = patientId;
}
public LocalDate getVisitDate() {
return visitDate;
}
public void setVisitDate(LocalDate visitDate) {
this.visitDate = visitDate;
}
@Override
public String toString() {
return "Visit{" +
"doctorId=" + doctorId +
", patientId=" + patientId +
", visitDate=" + visitDate +
'}';
}
}
这是我读取文件并解析它的代码
这样我就可以提取我需要的东西了:
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.time.LocalDate;
import java.util.ArrayList;
import java.util.List;
public class Main4 {
public static void main(String[] args) throws IOException {
List<Visit> visits = readAndParse();
System.out.println(visits);
}
public static List<Visit> readAndParse() throws IOException {
List<Visit> visits = new ArrayList<>();
BufferedReader bufferedReader = new BufferedReader(new FileReader("wizyty.txt"));
bufferedReader.readLine();
String line;
while ((line = bufferedReader.readLine()) != null) {
String[] s = line.split(" \s");
visits.add(new Visit(Integer.parseInt(s[0]), Integer.parseInt(s[1]), LocalDate.parse(s[2])));
}
bufferedReader.close();
return visits;
}
}
当我尝试运行它时,我得到以下输出:
Exception in thread "main" java.lang.NumberFormatException: For input string: "23 124 2006-12-13"
at java.base/java.lang.NumberFormatException.forInputString(NumberFormatException.java:67)
at java.base/java.lang.Integer.parseInt(Integer.java:668)
at java.base/java.lang.Integer.parseInt(Integer.java:786)
at victor.Main4.readAndParse(Main4.java:31)
at victor.Main4.main(Main4.java:16)
有没有人可以向我解释我做错了什么?
谢谢
解决方案已经修改以适应您的限制,即无论如何都不要修改文件,所以我用您提供的旧内容替换了文本文件的内容,并修改了您的程序以使用该文件作为是!
Main4.java
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.List;
//Needs a parser
public class Main4
{
public static void main(String[] args) throws IOException
{
List<Visit> visits = readAndParse();
System.out.println(visits);
}
public static List<Visit> readAndParse() throws IOException {
int id, patientId;
DateTimeFormatter date;
List<Visit> visits = new ArrayList<>();
BufferedReader bufferedReader = new BufferedReader(new FileReader("wizyty.txt"));
bufferedReader.readLine();
String line;
while ((line = bufferedReader.readLine()) != null)
{
if(line.charAt(0) == '`') continue;
else
{
String[] s = line.split("\s");
s = removeEmptyTokens(s);
for (int i = 0; i < s.length; i++)
{
visits.add(
new Visit(Integer.parseInt(s[0]),
Integer.parseInt(s[1]),
DateTimeFormatter.ofPattern(s[2]))
);
}
}
}
bufferedReader.close();
return visits;
}
private static String[] removeEmptyTokens (String[] text)
{
ArrayList<String> newText = new ArrayList<>();
for (int i = 0; i < text.length; i++)
{
if(text[i].isEmpty()) continue;
else newText.add(text[i]);;
}
return replaceElements(newText, text);
}
private static String[] replaceElements(ArrayList<String> list, String[] array)
{
array = new String[list.size()];
for (int i = 0; i < list.size(); ++i)
{
array[i] = list.get(i);
}
return array;
}
}
Visits.Java
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
public class Visit
{
private int doctorId;
private int patientId;
private DateTimeFormatter visitDate;
public Visit(int doctorId, int patientId, DateTimeFormatter visitDate) {
this.doctorId = doctorId;
this.patientId = patientId;
this.visitDate = visitDate;
}
public int getDoctorId() {
return doctorId;
}
public void setDoctorId(int doctorId) {
this.doctorId = doctorId;
}
public int getPatientId() {
return patientId;
}
public void setPatientId(int patientId) {
this.patientId = patientId;
}
public DateTimeFormatter getVisitDate() {
return visitDate;
}
public void setVisitDate(DateTimeFormatter visitDate) {
this.visitDate = visitDate;
}
@Override
public String toString() {
return "Visit{" +
"doctorId=" + doctorId +
", patientId=" + patientId +
", visitDate=" + visitDate +
'}';
}
}
文本文件返回初始状态
`Id_doctor Id_patient Date_visit
23 124 2006-12-13
23 172 2006-1-25
23 191 2006-2-1
23 191 2006-9-26
23 207 2006-9-25
23 252 2006-3-6
23 272 2006-10-26
23 272 2007-2-13
23 291 2006-1-9
23 291 2006-6-6
23 416 2006-1-7
25 100 2006-8-4
25 135 2006-9-24
25 135 2007-4-7
25 248 2006-5-26
26 238 2006-8-2
26 238 2007-3-12
26 249 2006-10-19
26 401 2006-4-9
28 111 2006-2-3
28 161 2006-10-15
28 209 2007-4-1
28 246 2006-7-17
28 246 2006-9-27
`
我尝试从这个文件中读取数据 txt 所以稍后我可以获得例如最大的 ID 或最近的访问日期等:
`Id_doctor Id_patient Date_visit
23 124 2006-12-13
23 172 2006-1-25
23 191 2006-2-1
23 191 2006-9-26
23 207 2006-9-25
23 252 2006-3-6
23 272 2006-10-26
23 272 2007-2-13
23 291 2006-1-9
23 291 2006-6-6
23 416 2006-1-7
25 100 2006-8-4
25 135 2006-9-24
25 135 2007-4-7
25 248 2006-5-26
26 238 2006-8-2
26 238 2007-3-12
26 249 2006-10-19
26 401 2006-4-9
28 111 2006-2-3
28 161 2006-10-15
28 209 2007-4-1
28 246 2006-7-17
28 246 2006-9-27
`
这是我为 txt 文件创建的 class :
import java.time.LocalDate;
public class Visit {
private int doctorId;
private int patientId;
private LocalDate visitDate;
public Visit(int doctorId, int patientId, LocalDate visitDate) {
this.doctorId = doctorId;
this.patientId = patientId;
this.visitDate = visitDate;
}
public int getDoctorId() {
return doctorId;
}
public void setDoctorId(int doctorId) {
this.doctorId = doctorId;
}
public int getPatientId() {
return patientId;
}
public void setPatientId(int patientId) {
this.patientId = patientId;
}
public LocalDate getVisitDate() {
return visitDate;
}
public void setVisitDate(LocalDate visitDate) {
this.visitDate = visitDate;
}
@Override
public String toString() {
return "Visit{" +
"doctorId=" + doctorId +
", patientId=" + patientId +
", visitDate=" + visitDate +
'}';
}
}
这是我读取文件并解析它的代码 这样我就可以提取我需要的东西了:
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.time.LocalDate;
import java.util.ArrayList;
import java.util.List;
public class Main4 {
public static void main(String[] args) throws IOException {
List<Visit> visits = readAndParse();
System.out.println(visits);
}
public static List<Visit> readAndParse() throws IOException {
List<Visit> visits = new ArrayList<>();
BufferedReader bufferedReader = new BufferedReader(new FileReader("wizyty.txt"));
bufferedReader.readLine();
String line;
while ((line = bufferedReader.readLine()) != null) {
String[] s = line.split(" \s");
visits.add(new Visit(Integer.parseInt(s[0]), Integer.parseInt(s[1]), LocalDate.parse(s[2])));
}
bufferedReader.close();
return visits;
}
}
当我尝试运行它时,我得到以下输出:
Exception in thread "main" java.lang.NumberFormatException: For input string: "23 124 2006-12-13"
at java.base/java.lang.NumberFormatException.forInputString(NumberFormatException.java:67)
at java.base/java.lang.Integer.parseInt(Integer.java:668)
at java.base/java.lang.Integer.parseInt(Integer.java:786)
at victor.Main4.readAndParse(Main4.java:31)
at victor.Main4.main(Main4.java:16)
有没有人可以向我解释我做错了什么? 谢谢
解决方案已经修改以适应您的限制,即无论如何都不要修改文件,所以我用您提供的旧内容替换了文本文件的内容,并修改了您的程序以使用该文件作为是!
Main4.java
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.List;
//Needs a parser
public class Main4
{
public static void main(String[] args) throws IOException
{
List<Visit> visits = readAndParse();
System.out.println(visits);
}
public static List<Visit> readAndParse() throws IOException {
int id, patientId;
DateTimeFormatter date;
List<Visit> visits = new ArrayList<>();
BufferedReader bufferedReader = new BufferedReader(new FileReader("wizyty.txt"));
bufferedReader.readLine();
String line;
while ((line = bufferedReader.readLine()) != null)
{
if(line.charAt(0) == '`') continue;
else
{
String[] s = line.split("\s");
s = removeEmptyTokens(s);
for (int i = 0; i < s.length; i++)
{
visits.add(
new Visit(Integer.parseInt(s[0]),
Integer.parseInt(s[1]),
DateTimeFormatter.ofPattern(s[2]))
);
}
}
}
bufferedReader.close();
return visits;
}
private static String[] removeEmptyTokens (String[] text)
{
ArrayList<String> newText = new ArrayList<>();
for (int i = 0; i < text.length; i++)
{
if(text[i].isEmpty()) continue;
else newText.add(text[i]);;
}
return replaceElements(newText, text);
}
private static String[] replaceElements(ArrayList<String> list, String[] array)
{
array = new String[list.size()];
for (int i = 0; i < list.size(); ++i)
{
array[i] = list.get(i);
}
return array;
}
}
Visits.Java
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
public class Visit
{
private int doctorId;
private int patientId;
private DateTimeFormatter visitDate;
public Visit(int doctorId, int patientId, DateTimeFormatter visitDate) {
this.doctorId = doctorId;
this.patientId = patientId;
this.visitDate = visitDate;
}
public int getDoctorId() {
return doctorId;
}
public void setDoctorId(int doctorId) {
this.doctorId = doctorId;
}
public int getPatientId() {
return patientId;
}
public void setPatientId(int patientId) {
this.patientId = patientId;
}
public DateTimeFormatter getVisitDate() {
return visitDate;
}
public void setVisitDate(DateTimeFormatter visitDate) {
this.visitDate = visitDate;
}
@Override
public String toString() {
return "Visit{" +
"doctorId=" + doctorId +
", patientId=" + patientId +
", visitDate=" + visitDate +
'}';
}
}
文本文件返回初始状态
`Id_doctor Id_patient Date_visit
23 124 2006-12-13
23 172 2006-1-25
23 191 2006-2-1
23 191 2006-9-26
23 207 2006-9-25
23 252 2006-3-6
23 272 2006-10-26
23 272 2007-2-13
23 291 2006-1-9
23 291 2006-6-6
23 416 2006-1-7
25 100 2006-8-4
25 135 2006-9-24
25 135 2007-4-7
25 248 2006-5-26
26 238 2006-8-2
26 238 2007-3-12
26 249 2006-10-19
26 401 2006-4-9
28 111 2006-2-3
28 161 2006-10-15
28 209 2007-4-1
28 246 2006-7-17
28 246 2006-9-27
`