我试图弄清楚如何在 .txt 文件中搜索用户给出的特定日期和时间。目前我的代码是这样做的:
PRINT "Enter the date of the task: "
READ into task_date (string)
PRINT "Enter the time of the task: "
READ into task_time (string)
PRINT "Enter the name of the task: "
READ into task_name (string)
LOAD tasks.txt file
我希望能够在这三个步骤中从用户那里读取数据(是的,我知道一步完成可能会更好,但这更多的是对朋友的概念证明),然后搜索tasks.txt 文件中留出一个空格来插入task_date + task_time + task_name。任何帮助,将不胜感激。谢谢
编辑: 好的,我正在创建一个当前基于终端的日历应用程序。 它的作用是让用户输入任务日期/时间/名称并将其附加到名为tasks.txt的文件中的正确位置(文件示例如下)
10-6-2020 6:30 am Wake up
10-6-2020 7:00 am Take mom to school
10-6-2020 7:30 am arrive back home
10-6-2020 8:30 am leave for class
10-6-2020 9:00 am arrive on campus
10-6-2020 12:00 pm leave campus
10-6-2020 12:30 pm arrive back home
10-6-2020 1:00 pm Meeting with advisors
假设用户输入“10-06-2020 10:00 am Walk into class” 我希望代码在上午 9:00 到中午 12:00 之间插入该行
如果我发布的第一个问题不完整,我深表歉意。
编辑2: 我的问题不是让其他人为我编码。我的问题是任何人都可以指出如何在 txt 文件的正确位置附加字符串的方向。 (如果你感到困惑,请看上面)。再说一遍,我不会要求任何人为我编码。
System.out.print("Enter the date of the task: ");
// // STRING task_time = INPUT
task_date = scan.nextLine();
// // PRINT "Enter the name of the task: "
System.out.print("Enter the time of the task: ");
// // STRING task_name = INPUT
String task_time = scan.nextLine();
// // CREATE new_task = task_date + task_time + task_name (STRING)
// String new_task = task_date;
System.out.print("Enter the name of the task: ");
// STRING task_date = INPUT
String task_name = scan.nextLine();
String task = task_date + " " + task_time + " " + task_name;
System.out.println(task);
// LOADFILE tasks.txt
String search_date = task_date;
String search_time = task_time;
int lineNumber = 0;
File taskstxt = new File("tasks.txt");
Scanner filereader = new Scanner(taskstxt);
// SEARCH tasks.txt for corresponding date and time
while (filereader.hasNextLine()) {
final String lineFromFile = filereader.nextLine();
if (lineFromFile.contains(search_date)) {
}
}
上面是有问题的代码片段。我想在txt文件中搜索用户输入的日期和时间,如果存在则打印“您已经有该时间的任务”,如果不存在我想在文件中附加任务日期/时间/姓名。如果这让任何人感到困惑,我很抱歉(我发现有时很难准确地写出我的想法)
如何用 Java 构建“日历应用程序”?
根据您的上述设计,您的应用程序将具有以下内容:
如何将新的日历记录保存在正确的位置?
我建议:
编写一个“TaskList”类来保存您的日历记录。
简单示例:
public class TaskList {
public List<TaskRecord> tasks;
public void save(string filename) { ... }
public void load(string filename) { ... }
}
为各个任务编写一个“TaskRecord”类:
简单示例:
public class TaskRecord {
public Date dateTime;
public String taskText;
}
将“日期”与课堂上的“文本”分开非常重要。
如果您想要一个简单的文本文件,并且希望所有内容都在同一行,那么请选择一个易于解析的分隔符。例如,您可以使用制表符分隔“日期”和“时间”(
\t
):
10-6-2020 6:30 am\tWake up
在您准备好“保存”更新的文件之前,“将记录插入到正确的位置”可能并不重要。您可以在“write()”之前简单地“sort()”(按日期/时间):
简单示例:
public class TaskRecord implements Comparator<Date> {
public Date dateTime;
public String taskText;
@Override
public int compare(TaskRecord a, TaskRecord b) {
return a.datetime.compareTo(b.datetime);
}
}
如果您确实想在插入时对每个新记录进行排序,您可能仍然需要实现“比较器”(如上所述)。您将循环浏览列表,直到找到时间/日期 >= 新日期,然后在该索引处按
List.add()
。
您可能还想向“TaskList”类添加方法来添加、修改和/或删除记录。
“封装”可以让你的类更加健壮。您想要隐藏该类的用户对于该类来说不是“必需”的所有内容
简单示例:
public class TaskRecord implements Comparator<Date> {
private Date dateTime;
private String taskText;
// Initialize object state in constructor
public TaskRecord(Date dateTime, String taskText) {
this.dateTime = dateTime;
this.taskText = taskText;
}
// "Getter" methods for read-only access
Date getDateTime() { return dateTime; }
String getTaskText() { return taskText; }
@Override
public int compare(TaskRecord a, TaskRecord b) {
return a.datetime.compareTo(b.datetime);
}
}