使用java将日期编号转换为单词

时间:2016-06-30 02:05:27

标签: java

我想将日期转换为单词。例如:12/12/2012 - > twelve twelve two thousand twelve我已经使用了数字转换器。但现在我有问题打印出来。

这是我的代码:

   String patternString = "\\d{2}/\\d{2}/\\d{4}"; // date regex

   Pattern pattern = Pattern.compile(patternString); // pattern compiling
   Matcher matcher = pattern.matcher(nom); // matching with pattern with input text from user

   if (matcher.find()) {
       String get_data = matcher.group();
           if(get_data.contains("/")){ // check either has "/" slash or not
              String parts[] = get_data.split("[/]"); // split process
              String get_day = parts[0]; // day will store in first array
              String get_month = parts[1]; // month will store in second array
              String get_year = parts[2]; // year will store in third array

              String s = NumberConvert.convert(Integer.parseInt(get_day)) 
                        + NumberConvert.convert(Integer.parseInt(get_month)) 
                        + NumberConvert.convert(Integer.parseInt(get_year));
              String replace = matcher.replaceAll(s); // replace number to words
              System.out.println(replace);
            }
   } else {...}

从用户输入文字:

12/12/2012 +++ 23/11/2010

但是结果只打印第一个模式和下一个模式也会替换第一个模式的值。

twelve twelve two thousand twelve +++ twelve twelve two thousand twelve

请建议我解决方案

1 个答案:

答案 0 :(得分:2)

您问题的直接解决方案是使用Matcher.replaceFirst()而不是Matcher.replaceAll(),因为您只希望将第一个日期模式替换为您的书面版本约会。

String replace = matcher.replaceFirst(s);

如果您希望能够一次处理一个数字日期,则可以使用以下代码以从左到右的方式处理:

String patternString = "\\d{2}/\\d{2}/\\d{4}";

Pattern pattern = Pattern.compile(patternString);
Matcher matcher = pattern.matcher(nom);

String output = "";

while (matcher.find()) {
    String get_data = matcher.group();

    String parts[] = get_data.split("/");
    String get_day = parts[0];
    String get_month = parts[1];
    String get_year = parts[2];

    String s = NumberConvert.convert(Integer.parseInt(get_day)) +
               NumberConvert.convert(Integer.parseInt(get_month)) +
               NumberConvert.convert(Integer.parseInt(get_year));

    if (output.equals("")) {
        output = s;
    }
    else {
        output += " +++ " + s;
    }

    String replace = matcher.replaceFirst("");
    matcher = pattern.matcher(replace);
}

在每次迭代之后,上面的代码使用已删除上一个匹配日期的字符串重置Matcher。这让你吃#34;一个日期,从左到右,随着时间的推移构建人类可读的日期输出。