java - switch 的替代方案——替换字符

标签 java switch-statement stringbuilder

我被要求为类(class)编写一个程序:

  1. 已接受 .txt 文件
  2. 将文件中的数字 0-9 转换为对应的文本(如果数字位于句子开头,则使用大写)
  3. 将完成的句子打印到新文件

示例:

The 8 eggs were separated into 3 groups.

将转换为:

The eight eggs were separated into three groups.
<小时/>

目前,我正在使用一个(非常)长的 switch 语句和 StringBuilder 来完成任务:

switch(sb.charAt(i)){
        case '0':
            if (i == 0)
                sb.replace(i, i+1, "Zero");
            else
                sb.replace(i, i+1, "zero");
            break;
        case '1':
            if (i == 0)
                sb.replace(i, i+1, "One");
            else
                sb.replace(i, i+1, "one");
            break;
        ..... 
}

有更先进/更有效的方法来完成这项任务吗?

最佳答案

您可能正在寻找HashMap 。这可以帮助:

  1. 创建静态HashMap<String, String> DIGITS并使用put("0", "zero"); put("1", "one"); //etc..来初始化它。
  2. 使用 string.split(" ") 分割输入字符串;这将创建一个如下所示的字符串数组:{"The","8","eggs",...} .
  3. 使用StringBuilder建立答案:

    for (String s : splitted) {
        if (DIGITS.contains(s))
            sb.append(DIGITS.get(s));
        else
            sb.append(s);
        sb.append(' ');
    }
    

关于java - switch 的替代方案——替换字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28799408/

相关文章:

c - 没有跳转表的switch语句

java - 基于搜索字符串插入文本的字符串正则表达式

java - 在什么情况下trimToSize()方法不会影响Java中StringBuffer类的capacity()方法返回的值?

java - StringBuilder - setLength(0) 与 new 实例化,哪个更好?

java - 两个以相同数据开头的 ArrayList

具有返回类型的 Java 方法在没有返回语句的情况下编译

arrays - Swift switch case 使用数组内容,语法?

java - 在 Android 应用程序的导航菜单内创建一个警报对话框以注销

java - 有什么方法可以分析传递给 String.format(...) 的模式

java - 如何通过 Java 代码(而不是通过 JMS API - 生存时间)在 WebSphere MQ(队列)中设置消息过期时间