有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

替换字符切换的java替代方案

我被要求为班级编写一个程序,其中:

  1. 接受了一份工作。txt文件
  2. 将文件中的数字0-9转换为等效文本(如果数字位于句首,则使用大写)
  3. 将完成的句子打印到新文件中

示例:

The 8 eggs were separated into 3 groups.

将转换为:

The eight eggs were separated into three groups.

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

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;
        ..... 
}

有更高级/更有效的方法来完成此任务吗


共 (3) 个答案

  1. # 1 楼答案

    我会这样做。使用Character.isDigit遍历字符,检查是否应该替换它们。如果是这样,只需使用(character-'0')作为索引在数组中查找替换字符串:

        String[] textArray =  new String[]{ "zero", "one", "two",
                                            "three", "four", "five",
                                            "six", "seven", "eight", "nine" };
    
        StringBuilder sb = new StringBuilder("abc 1 xyz 8");
        System.out.println(sb);
    
        for (int i=0; i<sb.length(); ++i) {
            char c = sb.charAt(i);
            if (Character.isDigit(c)) {
                sb.replace(i, i+1, textArray[c - '0']);
            }
        }
        System.out.println(sb);
    

    输出为:

    abc 1 xyz 8
    abc one xyz eight
    
  2. # 2 楼答案

    也许你在找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(' ');
      }
      
  3. # 3 楼答案

    你可以这样做

    Sting[] token = statement.split(" ");
    String newStatement = "";
    for(int x=0; x<token.length; x++){
        if(token[x].matches("[0-9]+"))
            newStatement  += convertToText(token[x]) + " ";
        else
            newStatement  += token[x] + " ";        
    }
    
    public static String converetToText(String str){
        String[] text = {"zero", "one", "two", "three", "four", "five", "six", "seven". "eight", "nine"};
        return text[Integer.parseInt(str)];
    }
    

    你的整个计划都完成了


    解释:

    1. 将给定语句拆分为空格
    2. 将单个单词存储到字符串数组中(标记[])
    3. 检查每个单词是否为数字
    4. 如果是数字,则转换为文本并将其添加到新语句中
    5. 如果是文本,直接添加到新语句中