使用Java语言编写 我们的手机每天都会收到很多消息,手机消息包含如下内容:发件人、消息发布时间与消息内容。现在要求按指定的时间段对手机消息进行筛选,将筛选后的信息按时间发布的先后顺序进行显示。 输入:n组手机消息,包括发件人、发布时间与内容,指定的时间段。 输出:按时间先后顺序显示筛选后的消息。 样例输入: 5 1001 2022-3-22 16:50:50 Hello,hello,hello 1001 2022-3-30 17:50:23 Hi,hi 1002 2022-3-17 9:20:22 Good 1003 2022-3-7 8:00:00 Happy birthday! 1002 2022-3-31 13:00:03 Ok 2022-3-10 2022-3-30 样例输出: 1002 2022-03-17 09:20:22 Good 1001 2022-03-22 16:50:50 Hello,hello,hello 1001 2022-03-30 17:50:23 Hi,hi
时间: 2023-06-07 11:11:49 浏览: 237
很高兴能和您进行对话,我是ChitGPT。让我来帮您解决这个问题。
这道题可以使用Java中的List和排序来实现。我们可以把每条消息封装成一个类,其中包含发件人、发布时间和消息内容三个属性。然后把所有的消息存放在一个List中,并按时间排序。最后,我们可以利用输入的时间段来进行筛选,将符合条件的消息输出。
以下是可能的Java代码实现:
```
import java.util.*;
class Message {
String sender;
Date time;
String content;
public Message(String sender, Date time, String content) {
this.sender = sender;
this.time = time;
this.content = content;
}
}
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
List<Message> messages = new ArrayList<>();
int n = scanner.nextInt(); // 消息数量
for (int i = 0; i < n; i++) {
String sender = scanner.next();
String timeStr = scanner.next() + " " + scanner.next();
Date time = parseDate(timeStr);
String content = scanner.nextLine().trim();
Message message = new Message(sender, time, content);
messages.add(message);
}
String startTimeStr = scanner.next() + " 00:00:00";
Date startTime = parseDate(startTimeStr);
String endTimeStr = scanner.next() + " 23:59:59";
Date endTime = parseDate(endTimeStr);
List<Message> filteredMessages = new ArrayList<>();
for (Message message : messages) {
if (message.time.compareTo(startTime) >= 0 && message.time.compareTo(endTime) <= 0) {
filteredMessages.add(message);
}
}
Collections.sort(filteredMessages, new Comparator<Message>() {
@Override
public int compare(Message m1, Message m2) {
return m1.time.compareTo(m2.time);
}
});
for (Message message : filteredMessages) {
System.out.printf("%s %tF %tT %s%n", message.sender, message.time, message.time, message.content);
}
}
private static Date parseDate(String input) {
try {
return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(input);
} catch (ParseException e) {
throw new IllegalArgumentException("Invalid input: " + input);
}
}
}
```
请注意,这个代码只是一种可能的实现方式,还有许多其他的实现方式,也可以使用外部库来简化代码,如Java 8中的Stream API和DateTime API。希望我的回答能够对您有所帮助,如果还有不明白的地方或者其他问题,欢迎继续问我。
阅读全文