Java正则表达式将字符串拆分为一个数字数组
我有以下格式的扫描仪字符串输入:12:00:00PM 我最终通过以下方式将PM或AM隔离: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("
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方法,但这也很有效!谢谢,那就更简单了!!我投了你一票,但我的一票还不算。