如何解决如何在Java中一行输入时间?
问题出在 Java
我要花时间输入如下
12:00 AM 11:42 PM
将有一系列这样的输入,最多 N
行。
这里给出了两个不同的时间输入
1)12:00 AM
2)11:42 PM
但它们在同一行。
输入的时间是一个人进入(12:00 AM)和离开(11:42 PM)
我知道 SimpleDateFormat
,但我无法修改它以满足我所说的需要。
所以请帮忙
解决方法
对于上述问题,正则表达式对于从输入字符串/文本中查找和收集值非常有帮助。如下所示。
public static void main(String[] args) {
String input = "12:00 AM 11:42 PM";
ArrayList<String> list = new ArrayList();
Pattern pattern = Pattern.compile("[\\d:]*[ ](AM|PM)");
//Matching the compiled pattern in the String
Matcher matcher = pattern.matcher(input);
while (matcher.find()) {
list.add(matcher.group());
}
Iterator<String> it = list.iterator();
System.out.println("List of matches: ");
while(it.hasNext()){
System.out.println(it.next());
}
}
这里我们输入的字符串包含时间。 然后我们使用正则表达式来查找模式 找到的匹配项之一,我们将其收集到列表中。
,有很多方法可以做到这一点。我会使用正则表达式。
String input = "12:00 AM 11:42 PM";
String pattern = "(\\d+:\\d+ AM) (\\d+:\\d+ PM)";
Pattern r = Pattern.compile(pattern);
Matcher m = r.matcher(input);
if(m.find()) {
String am = m.group(1);
String pm = m.group(2);
}
这会为您提供两个字符串 am
和 pm
。
然后您可以使用 SimpleDateFormat
将它们解析为 Date
。
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("HH:mm aa");
,
您要查找的格式是:hh:mm a
。
来自 JavaDoc:
符号 | 类型 | 示例 | |
---|---|---|---|
h | clock-hour-of-am-pm (1-12) | 数量 | 12 |
米 | 分时 | 数量 | 30 |
一 | 上午到下午 | 文字 | 下午 |
正如大家所说,regex
是最好的选择。我给你提供一个简单的方法。我将在这里使用 BufferedReader 作为示例。随意使用任何 input stream
。
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in));
对于 n 个输入,只需接受 n 并开始一个循环。
int n = Integer.parseInt(bufferedReader.readLine().trim());
for (int i = 0;i < n;i++)
每次您将接受包含到达日期和离开日期的每一行输入作为单个表达式,并使用正则表达式将其拆分 使用 {{1} } delimiters
和 :
。
例如:12:00 AM 11:42 PM 将被拆分为由元素 [12,00,AM,11,42,PM] 组成的字符串数组。
whitespace
如果您想执行任何进一步的计算,此方法将对您有所帮助。您还可以使用 String[] in = bufferedReader.readLine().split("[: ]");
//Array L to store HH MM XX of date of arrival at respective index
String[] L = new String[3];
L[0] = in[0];
L[1] = in[1];
L[2] = in[2];
//Array R to store HH MM XX of date of departure at respective index
String[] R = new String[3];
R[0] = in[3];
R[1] = in[4];
R[2] = in[5];
将它们转换为 Integer
,这将使您轻松进行任何类型的算术或比较计算。简单明了,虽然有点长。
希望对你有所帮助。
,java.time 和一个正则表达式
我建议您使用 java.time,现代 Java 日期和时间 API,用于您的时间工作。有多种方法可以将字符串一分为二以分隔其中的两个时间;我也去寻找一个正则表达式。 String.split()
接受一个。
DateTimeFormatter timeFormatter = DateTimeFormatter.ofPattern("h:mm a",Locale.ENGLISH);
String inputLine = "12:00 AM 11:42 PM";
String[] timeStrings = inputLine.split("(?<=M) ");
if (timeStrings.length == 2) {
LocalTime entering = LocalTime.parse(timeStrings[0],timeFormatter);
LocalTime leaving = LocalTime.parse(timeStrings[1],timeFormatter);
System.out.format("Entered %s,left %s.%n",entering,leaving);
} else {
System.err.println("Improper format: " + inputLine);
}
这个片段的输出是:
进入 00:00,离开 23:42。
正则表达式 (?<=M)
匹配以大写字母 M
开头的空格,因此这是分割输入字符串的位置。
链接: Oracle tutorial: Date Time 解释如何使用 java.time。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。