我有两种模式,每种模式都会将数字转换为单词并返回其值。如何获取值并将其打印在正确的位置?
我创建了这个replaceIfNeeded()方法:
public static String replaceIfNeeded(String value){
String patternDate = "\\d{1,2}/\\d{1,2}/\\d{4}"; // dd/mm/yyyy @ d/m/yyyy
String patternTime = "\\d{1,2}:\\d{1,2}"; // hh:mm (time)
Pattern date_pattern = Pattern.compile(patternDate);
Matcher date_matcher = date_pattern.matcher(value);
Pattern time_pattern = Pattern.compile(patternTime);
Matcher time_matcher = time_pattern.matcher(value);
if (date_matcher.find()) { // find date pattern
String get_date = date_matcher.group();
String parts[] = get_date.split("/"); // split process
String get_day = parts[0]; //store day in first array
String get_month = parts[1]; //store month in second array
String get_year = parts[2]; //store year in third array
String s = NumberConvert.convert(Integer.parseInt(get_day)) + " of" +
NumberConvert.convert(Integer.parseInt(get_month)) +
NumberConvert.convert(Integer.parseInt(get_year));
value = date_matcher.replaceFirst(s); //replace number to words in variable value
}
else if (time_matcher.find()) { // find time pattern
String get_time = time_matcher.group();
String parts[] = get_time.split(":"); // split process
String get_hour = parts[0]; //store hour in first array
String get_minute = parts[1]; // store minute in second array
String s = NumberConvert.convert(Integer.parseInt(get_hour)) + " and " +
NumberConvert.convert(Integer.parseInt(get_minute)) + " minutes ";
value = time_matcher.replaceFirst(s); // replace number to words in variable value
}
return value; // return value
}
主要方法如下:
public static void main(String[] args) {
Scanner reader = new Scanner(System.in);
System.out.println("Enter your text here: ");
String text = reader.nextLine();
// remove any space between "/"
String data = text.replaceAll("\\s+/", "/").replaceAll("/\\s+", "/");
String result = replaceIfNeeded(data);
System.out.println(result);
来自用户的输入:
我的出生日期是12/12/2003,时间是23:12。
结果:
我的出生日期是12/12/2003,时间是二十三分钟。
日期模式没有返回值。请指导我。我想返回值并将其打印在正确的位置。用户可以输入超过1个日期和时间。
答案 0 :(得分:0)
方法replaceIfNeeded()有两个问题:
如果没有找到日期模式,它只会检查时间模式(删除else语句)。
必须使用编辑的值初始化第二个匹配器。
尝试此功能:
public static String replaceIfNeeded(String value){
String patternDate = "\\d{1,2}/\\d{1,2}/\\d{4}"; // dd/mm/yyyy @ d/m/yyyy
String patternTime = "\\d{1,2}:\\d{1,2}"; // hh:mm (time)
Pattern date_pattern = Pattern.compile(patternDate);
Matcher date_matcher = date_pattern.matcher(value);
if (date_matcher.find()) { // find date pattern
String get_date = date_matcher.group();
String parts[] = get_date.split("/"); // split process
String get_day = parts[0]; //store day in first array
String get_month = parts[1]; //store month in second array
String get_year = parts[2]; //store year in third array
String s = NumberConvert.convert(Integer.parseInt(get_day)) + " of" +
NumberConvert.convert(Integer.parseInt(get_month)) +
NumberConvert.convert(Integer.parseInt(get_year));
value = date_matcher.replaceFirst(s); //replace number to words in variable value
}
// "else" removed and time_matcher initialized with the edited value
Pattern time_pattern = Pattern.compile(patternTime);
Matcher time_matcher = time_pattern.matcher(value);
if (time_matcher.find()) { // find time pattern
String get_time = time_matcher.group();
String parts[] = get_time.split(":"); // split process
String get_hour = parts[0]; //store hour in first array
String get_minute = parts[1]; // store minute in second array
String s = NumberConvert.convert(Integer.parseInt(get_hour)) + " and " +
NumberConvert.convert(Integer.parseInt(get_minute)) + " minutes ";
value = time_matcher.replaceFirst(s); // replace number to words in variable value
}
return value; // return value
}