返回值并将其打印在正确的位置

时间:2016-07-04 08:47:06

标签: java regex

我有两种模式,每种模式都会将数字转换为单词并返回其值。如何获取值并将其打印在正确的位置?

我创建了这个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个日期和时间。

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

}