在Java中如何在一行中进行时间输入?

在Java中如何在一行中进行时间输入?,java,algorithm,datetime,datetime-parsing,timeofday,Java,Algorithm,Datetime,Datetime Parsing,Timeofday,问题在于Java 我想把时间输入如下 12:00 AM 11:42 PM 将有一系列这样的输入,最多有N行 这里给出了两种不同的时间输入 1)12:00 AM 2)11:42 PM 但他们在同一条线上 时间输入用于单个人员进入(上午12:00)和离开(晚上11:42) 我知道SimpleDateFormat,但我不能像上面所说的那样修改它以满足我的需要 因此,请帮助我,有很多方法可以做到这一点。我会使用正则表达式 String input=“12:00 AM 11:42 PM”; 字符串模

问题在于Java

我想把时间输入如下

12:00 AM 11:42 PM
将有一系列这样的输入,最多有
N行

这里给出了两种不同的时间输入

1)12:00 AM

2)11:42 PM
但他们在同一条线上

时间输入用于单个人员进入(上午12:00)和离开(晚上11:42)

我知道
SimpleDateFormat
,但我不能像上面所说的那样修改它以满足我的需要


因此,请帮助我,有很多方法可以做到这一点。我会使用正则表达式

String input=“12:00 AM 11:42 PM”;
字符串模式=“(\\d+:\\d+AM)(\\d+:\\d+PM)”;
Pattern r=Pattern.compile(Pattern);
匹配器m=r.匹配器(输入);
if(m.find()){
字符串am=m.group(1);
字符串pm=m.group(2);
}
这将为您提供两个字符串
am
pm

然后您可以使用
SimpleDateFormat
将它们解析为
Date

SimpleDateFormat SimpleDateFormat=新的SimpleDateFormat(“HH:mm aa”);

您要查找的格式是:
hh:mm a

从JavaDoc:

象征 描述 类型 例子 H 上午1时至下午12时 数 12 M 分钟 数 30 A. 每日上午及下午 文本 颗粒物
对于上述问题,正则表达式非常有助于从输入字符串/文本中查找和收集值。如下所示

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());
          }
    }
publicstaticvoidmain(字符串[]args){
字符串输入=“12:00am 11:42pm”;
ArrayList=新建ArrayList();
Pattern=Pattern.compile(“[\\d:][*[](AM | PM)”);
//匹配字符串中的已编译模式
Matcher Matcher=pattern.Matcher(输入);
while(matcher.find()){
添加(matcher.group());
}
Iterator it=list.Iterator();
System.out.println(“匹配列表:”);
while(it.hasNext()){
System.out.println(it.next());
}
}
这里我们有一个包含时间的输入字符串。 然后我们使用正则表达式来寻找模式
一个匹配发现我们正在将其收集到列表中。

正如大家所说,
regex
是最好的选择。我将为您提供一个简单的方法。这里我将使用BufferedReader作为示例。可以随意使用任何
输入流

BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in));
对于n个输入,只需接受n并开始一个循环

int n = Integer.parseInt(bufferedReader.readLine().trim());
for (int i = 0;i < n;i++)
如果要执行任何进一步的计算,此方法将有助于您。您还可以使用
整数包装类
将它们强制转换为
整数
,这将简化任何类型的算术或比较计算。它简单明了,虽然有点长

希望我能帮助您。

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);
    }
DateTimeFormatter timeFormatter=DateTimeFormatter.of模式(“h:mm a”,Locale.ENGLISH);
字符串inputLine=“12:00am 11:42pm”;

(如果你把它放在一个单一的字符串中,然后根据空间类似的数组将它拆分为12:00×上午11:42下午,考虑InTime=数组[0 ]+数组[1 ] OutTime=数组[2 ]+数组[3 ]。在第二个空格处拆分行,然后使用SimpleDateFormat解析每个部分。如果仍然卡住,请发布代码以及仍然不起作用的详细信息。我建议您不要使用
SimpleDateFormat
。该类非常麻烦且过时很长。请改用
DateTimeFormat
from。这是否回答了您的问题问题?谢谢你的贡献。它并没有像我理解的那样真正回答这个问题,因为每行上有两次。谢谢你的回答,但我从来没有遇到过模式和匹配器数据类型
    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);
    }