我有一个程序将String
中的数字0-9转换为它们的文本等价物(例如:" 0"变为"零")。但是,当数字在句子的开头时,我需要将其大写。
示例
4 dogs were chasing 3 cats.
The 8 eggs were separated into 3 groups.
变为:
four dogs were chasing three cats.
The eight eggs were separated into three groups.
代码
public String ConvertSentance(String s){
sb = new StringBuilder();
h.put("0","zero");
h.put("1","one");
h.put("2", "two");
h.put("3", "three");
h.put("4", "four");
h.put("5", "five");
h.put("6", "six");
h.put("7", "seven");
h.put("8", "eight");
h.put("9", "nine");
String[] split = s.split(" ");
for (String newS : split) {
if (h.containsKey(newS)) {
sb.append(h.get(newS));
sb.append(' ');
}
else {
sb.append(newS);
sb.append(' ');
}
}
convertedSent = sb.toString();
return sb.toString();
}
我怎样才能将这个大写字母大写,以便输出变成这个?
Four dogs were chasing three cats.
我只是在他们的号码在句子的开头时才能使它工作。我尝试了for-loops
的不同变体但没有成功。
答案 0 :(得分:1)
我想你应该使用一个简单的解析器。我的意思是什么?您应该定义新句子何时开始(在显示'.'
,'?'
,'!'
之后,下一个单词将从大写字母开始)。您可以使用简单的布尔字段sentenceEnded
,当newS
以其中一个符号结束时为true,在下一个单词后变为false。执行此操作时,您可以使用此代码示例执行所需操作:
if (sentenceEnded) {
String token = h.get(newS);
sb.append((char) ('A' + token.charAt(0) - 'a')); //dirty hack; dont use it in real projects
sb.append(token.substring(1, token.length()));
}