Java 如何强制输入某个约定
我试图从用户那里获取字符串输入,输入格式为“HH:MM am/pm”,例如“9:10 am” 我稍后将使用它显示小时、分钟和am或pm(在我的时间类中)的输入 最后,我将实现一个Java 如何强制输入某个约定,java,Java,我试图从用户那里获取字符串输入,输入格式为“HH:MM am/pm”,例如“9:10 am” 我稍后将使用它显示小时、分钟和am或pm(在我的时间类中)的输入 最后,我将实现一个try…except..来检查输入(对于小时/分钟,它必须是数值,介于0-12之间,并且只能使用am/pm)。 目前,我的代码仅在用户在HH:MM am/pm中输入时有效(不是中间的空格),如果输入失败,例如9:10pm由于缺少空格 我的问题-我可以强制输入,这样用户就必须遵循特定的约定吗?在这种情况下,时间和am/pm
try…except..
来检查输入(对于小时/分钟,它必须是数值,介于0-12之间,并且只能使用am/pm)。
目前,我的代码仅在用户在HH:MM am/pm
中输入时有效(不是中间的空格),如果输入失败,例如9:10pm
由于缺少空格
我的问题-我可以强制输入,这样用户就必须遵循特定的约定吗?在这种情况下,时间和am/pm之间必须有一个间隔
在我的客户端类中,代码如下所示:
class Client
{
public static void main(String[] args)
{
// I have removed the Scanner input method and use hardcoded values for now
String input = "9:10 pm";
String[] inputSplit = input.split(" ");
System.out.printf("\ntime:\t%s\n", inputSplit[0]);
System.out.printf("am/pm:\t%s\n", inputSplit[1]);
String[] time = inputSplit[0].split (":");
int hour = Integer.parseInt (time[0].trim() );
int min = Integer.parseInt (time[1].trim() );
System.out.printf("hr:\t\t%d\n", hour);
System.out.printf("mins:\t%d\n", min);
}
}
使用replaceAll()将tolarance添加到时间输入中,并使用java.time验证格式 时间格式验证通过以下方式完成:
LocalTime.parse(time, DateTimeFormatter.ofPattern("h:mm a", Locale.ENGLISH));
测试台和上下文中的时间格式验证:
public static void main(String[] args) {
List<String> inputList = Arrays.asList("1:10 pm", "02:10PM", "9:10pm"
, " 11:10 aM ", "14:10AM", "10:01");
DateTimeFormatter df = DateTimeFormatter.ofPattern("h:mm a", Locale.ENGLISH);
for (String input : inputList) {
// We give the input some tolerance regarding space and small letters
String time = input.trim()
.replaceAll("[aA][mM]", " AM")
.replaceAll("[pP][mM]", " PM")
.replaceAll("\\s+", " ");
String formattedTime = "";
try {
formattedTime = LocalTime.parse(time, df).format(df);
} catch (DateTimeParseException dtpe) {
System.out.printf("%nTime '%s' is not valid!%n", input.trim());
}
if(!formattedTime.isEmpty()) {
String[] splitTime = formattedTime.split("[\\s:]");
String hourAsString = splitTime[0];
String minAsString = splitTime[1];
String amPmAsString = splitTime[2];
System.out.printf("\ntime:\t%s\n", formattedTime);
System.out.printf("am/pm:\t%s\n", amPmAsString);
int hour = Integer.parseInt(hourAsString);
int min = Integer.parseInt(minAsString);
System.out.printf("hr:\t\t%d\n", hour);
System.out.printf("mins:\t%d\n", min);
}
}
}
一些“图案字母和符号”的含义:
请在此处阅读有关“图案字母和符号”的更多信息:
请解释一下代码,如步骤、逻辑等。
time: 1:10 PM
am/pm: PM
hr: 1
mins: 10
time: 2:10 PM
am/pm: PM
hr: 2
mins: 10
time: 9:10 PM
am/pm: PM
hr: 9
mins: 10
time: 11:10 AM
am/pm: AM
hr: 11
mins: 10
Time '14:10AM' is not valid!
Time '10:01' is not valid!
h = clock-hour-of-am-pm (1-12)
m = minute-of-hour
a = am-pm-of-day
public static void main(String[] args)
{
// I have removed the Scanner input method and use hardcoded values for now
String input = "9:10pm";
String newTime="";
String ampm= "";
if(input.contains("am")) {
newTime= input.substring(0,input.indexOf("am"));
ampm=input.substring(input.indexOf("am"));
}
else {
newTime= input.substring(0,input.indexOf("pm"));
ampm=input.substring(input.indexOf("pm"));
}
newTime=newTime.concat(" ").concat(ampm);
System.out.println(newTime);
String[] inputSplit = newTime.split(" ");
System.out.printf("\ntime:\t%s\n", inputSplit[0]);
System.out.printf("am/pm:\t%s\n", inputSplit[1]);
String[] time = inputSplit[0].split (":");
int hour = Integer.parseInt (time[0].trim() );
int min = Integer.parseInt (time[1].trim() );
System.out.printf("hr:\t\t%d\n", hour);
System.out.printf("mins:\t%d\n", min);
}