从HashMap String中大写特定字符

时间:2015-03-02 00:25:36

标签: java arrays string split hashmap

我有一个程序将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的不同变体但没有成功。

1 个答案:

答案 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()));
}