Java正则表达式将字符串拆分为一个数字数组

Java正则表达式将字符串拆分为一个数字数组,java,arrays,regex,Java,Arrays,Regex,我有以下格式的扫描仪字符串输入:12:00:00PM 我最终通过以下方式将PM或AM隔离: public class ConverTime { public static void main(String[] args) { Scanner sc = new Scanner(System.in); String timeString = sc.next(); String[] pmOrAm = timeString.split("

我有以下格式的扫描仪字符串输入:12:00:00PM

我最终通过以下方式将PM或AM隔离:

public class ConverTime
{
    public static void main(String[] args)
    {
        Scanner sc = new Scanner(System.in);
        String timeString = sc.next();

        String[] pmOrAm = timeString.split("\\d");
        String[] nums = timeString.split("(: + \\D)");

        // PM or AM
        String timeType = pmOrAm[pmOrAm.length - 1];
        for (String n: nums)
        {
            System.out.println(n);
        }
    }
} 
我知道隔离PM或AM的方法不是最好的,所以希望有更好的方法可以得到一个正好包含一个字符串的数组

但当我为“nums”数组运行for循环时,输出是:

 12:00:00PM
我希望输出如下:

12
00
00
没有“PM”或“AM”。我该怎么做?

像这样:

(\d+):(\d+):(\d+)(?:[AP]M)
请参阅。
请记住在
Java
(即
\\d+
)中双转义反斜杠。

如下所示:

(\d+):(\d+):(\d+)(?:[AP]M)
请参阅。

请记住在
Java
(即
\\d+
)中对反斜杠进行双转义。

您只需使用
String[]nums=timeString.split(“:”)

要输出每个索引,它将类似于
System.out.println(nums[0]),nums[1]和nums[2]
要删除AM/PM,可以执行
字符串removeap=nums[2]。子字符串(0,2)

您只需使用
String[]nums=timeString.split(“:”)
要输出每个索引,它将类似于
System.out.println(nums[0]),nums[1]和nums[2]
要删除AM/PM,可以执行
字符串removeap=nums[2]。子字符串(0,2)

一个简单的方法可以是:

timeString.split("(AM|PM|:)")
希望有帮助

一个简单的方法是:

timeString.split("(AM|PM|:)")

希望它有帮助

我认为更正确的方法是在这里使用正则表达式,而不是拆分。通过这种方式,您可以检测是否得到意外的输入,而不是错误地处理字符串

    String s = "12:01:02PM";
    Pattern pat = Pattern.compile("(\\d\\d):(\\d\\d):(\\d\\d)\\w\\w");
    Matcher matcher = pat.matcher(s);

    if (!matcher.matches()) {
        // Handle error...
    }

    int hh = Integer.valueOf(matcher.group(1));
    int mm = Integer.valueOf(matcher.group(2));
    int ss = Integer.valueOf(matcher.group(3));

    System.out.println(hh + ", " + mm + ", " + ss);

我认为更正确的方法是在这里使用正则表达式,而不是拆分。通过这种方式,您可以检测是否得到意外的输入,而不是错误地处理字符串

    String s = "12:01:02PM";
    Pattern pat = Pattern.compile("(\\d\\d):(\\d\\d):(\\d\\d)\\w\\w");
    Matcher matcher = pat.matcher(s);

    if (!matcher.matches()) {
        // Handle error...
    }

    int hh = Integer.valueOf(matcher.group(1));
    int mm = Integer.valueOf(matcher.group(2));
    int ss = Integer.valueOf(matcher.group(3));

    System.out.println(hh + ", " + mm + ", " + ss);

为了完整性起见,虽然对于拆分表达式和正则表达式已经有了很好的解决方案,但是对于您的用例还有另一个解决方案

Data date = new SimpleDateFormat("HH:mm:ssaa").parse(s);
Calendar cal = new GregorianCalendar();
cal.setTime(date);
System.out.println( data.get(Calendar.HOUR);
System.out.println( data.get(Calendar.MINUTE);
System.out.println( data.get(Calendar.SECOND);

这是一个不同方向的想法,因为我们在这里讨论的是时间字符串,这将允许您在纯正则表达式格式之外对其进行假设…

只是为了完整性,虽然对于拆分和正则表达式有很好的解决方案,但对于您的用例还有另一个解决方案

Data date = new SimpleDateFormat("HH:mm:ssaa").parse(s);
Calendar cal = new GregorianCalendar();
cal.setTime(date);
System.out.println( data.get(Calendar.HOUR);
System.out.println( data.get(Calendar.MINUTE);
System.out.println( data.get(Calendar.SECOND);

这是一个不同方向的想法,因为我们在这里讨论的是时间字符串,这将允许您在纯正则表达式格式之外对其进行假设…

您确定吗?现在,这不会在屏幕上显示任何内容。我做了以下操作:String[]nums=timeString.split((\d+):(\d+)(\d+)(\d+([AP]M)]@Nishashlaymon:使用
.split()
,您甚至可以使用冒号。您确定吗?现在,这不会在屏幕上显示任何内容。我做了以下操作:String[]nums=timeString.split((\d+):(\d+)(\d+)(\d+([AP]M)]@Nishashlaymon:使用
.split()
,您甚至可以使用冒号。这很有效!谢谢虽然我只是想纯粹使用split方法,但这也很有效!谢谢,那就更简单了!!我投了你的票,但我的票还不算在内。这成功了!谢谢虽然我只是想纯粹使用split方法,但这也很有效!谢谢,那就更简单了!!我投了你一票,但我的一票还不算。