我想将日期转换为单词。例如: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
请建议我解决方案
答案 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;一个日期,从左到右,随着时间的推移构建人类可读的日期输出。