用名称替换小数点1到10(“一个”,“两个” ..)

克里斯蒂·威尔士

我试图获取一个字符串,然后返回一个字符串,将数字1到10替换为这些数字的单词。例如:

我赢得了10场比赛中的7场,并获得了30美元。

应该变成:

我赢得场比赛中的场,并获得了30美元。

所以我这样做:

import org.apache.commons.lang3.StringUtils;

String[] numbers = new String[] {"1", "2", "3","4","5","6","7","8","9","10"};
String[] words   = new String[]{"one", "two", "three","four","five","six",
    "seven","eight","nine","ten"};
System.out.print(StringUtils.replaceEach(phrase, numbers, words));

结果是这样的:

我赢得了one0场比赛的7场,并获得了3美元。

因此,我尝试了一种蛮力方式,相信可以通过使用正则表达式或更优雅的字符串操作来加以改进:

public class StringReplace {

  public static void main(String[] args) {
    String phrase = "I won 7 of the 10 games and received 30 dollars.";
    String[] sentenceWords = phrase.split(" ");
    StringBuilder sb = new StringBuilder();
    for (String s: sentenceWords) { 
      if (isNumeric(s)) { 
        sb.append(switchOutText(s));
      }

      else { 
        sb.append(s);
      }
      sb.append(" ");

    }
    System.out.print(sb.toString());
  }

  public static String switchOutText(String s) { 
    if (s.equals("1"))
      return "one";
    else if (s.equals("2"))
      return "two";
    else if (s.equals("3"))
      return "three";
    else if (s.equals("4"))
      return "four";
    else if (s.equals("5"))
      return "fivee";
    else if (s.equals("6"))
      return "six";
    else if (s.equals("7"))
      return "seven";
    else if (s.equals("8"))
      return "eight";
    else if (s.equals("9"))
      return "nine";        
    else if (s.equals("10"))
      return "ten";
    else
      return s;        
  }

  public static boolean isNumeric(String s) { 
    try { 
      int i = Integer.parseInt(s);
    }
    catch(NumberFormatException nfe) { 
      return false;
    }
    return true;
  }

}

有没有更好的办法?对正则表达式建议特别感兴趣。

邓肯·琼斯

此方法使用正则表达式来匹配由非数字(或开始或结束字符)包围的目标数字:

String[] words = { "one", "two", "three", "four", "five", "six", "seven",
    "eight", "nine", "ten" };
String phrase = "I won 7 of the 10 games and received 30 dollars.";

for (int i = 1; i <= 10; i++) {
  String pattern = "(^|\\D)" + i + "(\\D|$)";
  phrase = phrase.replaceAll(pattern, "$1" + words[i - 1] + "$2");
}

System.out.println(phrase);

打印:

我赢得了十场比赛中的七场,并获得了30美元。

它还可以解决数字是句子中的第一个单词还是最后一个单词的问题。例如:

9只猫打开了100只其他猫,杀死了10只

正确地翻译成

九只猫打开了另外一百只猫,杀死了十只

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

SQL Query截断到两个小数点?

来自分类Dev

gnuplot:用另一个字符替换小数点

来自分类Dev

gnuplot:用另一个字符替换小数点

来自分类Dev

为什么setprecision()在一个数字中给我两个单独的小数点?

来自分类Dev

java字符串格式最多两个小数点后跟一个char

来自分类Dev

根据匹配值连接两个pyspark数据框(最大到小数点)

来自分类Dev

用两个小数点零作为(,-)而不是(,00)显示价格

来自分类Dev

PHP随机小数点在两个小数点之间,步长为0.5

来自分类Dev

Foundation 5滑块显示两个小数点

来自分类Dev

如何显示两个小数点

来自分类Dev

显示前两个小数点 .text

来自分类Dev

用一个替换两个连续的CR

来自分类Dev

我如何将一个小数点后一位的值四舍五入到两位小数

来自分类Dev

验证了一个小数点后两位且小于1000的数字

来自分类Dev

如何显示一个小数点后两位的数字?

来自分类Dev

向上舍入到第一个小数点

来自分类Dev

爪哇 - 转换一个十六进制颜色到小数点颜色

来自分类Dev

CodeGo.net>我如何将一个十进制值舍入到小数点后两位。每1000个

来自分类Dev

需要一个RegExp来过滤除一个小数点外的所有小数点

来自分类Dev

UITextField仅接受一个小数点,小数点前最多3位,小数点后最多2位

来自分类常见问题

小数点位置问题。我有一个论坛,需要平均值在小数点右边

来自分类Dev

如何从一个函数一直返回一个小数点后两位的数字

来自分类常见问题

如何强制使用两个小数点(.00)来存储浮点数

来自分类Dev

如何舍入浮点数,使小数点后只有两个尾随数字?

来自分类Dev

打印总数时只有两个小数点的问题[Python 2.7]

来自分类Dev

比较两个小数点并在Bash中打印相似之处?

来自分类Dev

如何让Python在int输入上工作,将它们转换为两个小数点?

来自分类Dev

试图获取两个不同格式日期之间的日差,给出小数点

来自分类Dev

试图以浮点数结尾两个小数点,但保持为0.0

Related 相关文章

  1. 1

    SQL Query截断到两个小数点?

  2. 2

    gnuplot:用另一个字符替换小数点

  3. 3

    gnuplot:用另一个字符替换小数点

  4. 4

    为什么setprecision()在一个数字中给我两个单独的小数点?

  5. 5

    java字符串格式最多两个小数点后跟一个char

  6. 6

    根据匹配值连接两个pyspark数据框(最大到小数点)

  7. 7

    用两个小数点零作为(,-)而不是(,00)显示价格

  8. 8

    PHP随机小数点在两个小数点之间,步长为0.5

  9. 9

    Foundation 5滑块显示两个小数点

  10. 10

    如何显示两个小数点

  11. 11

    显示前两个小数点 .text

  12. 12

    用一个替换两个连续的CR

  13. 13

    我如何将一个小数点后一位的值四舍五入到两位小数

  14. 14

    验证了一个小数点后两位且小于1000的数字

  15. 15

    如何显示一个小数点后两位的数字?

  16. 16

    向上舍入到第一个小数点

  17. 17

    爪哇 - 转换一个十六进制颜色到小数点颜色

  18. 18

    CodeGo.net>我如何将一个十进制值舍入到小数点后两位。每1000个

  19. 19

    需要一个RegExp来过滤除一个小数点外的所有小数点

  20. 20

    UITextField仅接受一个小数点,小数点前最多3位,小数点后最多2位

  21. 21

    小数点位置问题。我有一个论坛,需要平均值在小数点右边

  22. 22

    如何从一个函数一直返回一个小数点后两位的数字

  23. 23

    如何强制使用两个小数点(.00)来存储浮点数

  24. 24

    如何舍入浮点数,使小数点后只有两个尾随数字?

  25. 25

    打印总数时只有两个小数点的问题[Python 2.7]

  26. 26

    比较两个小数点并在Bash中打印相似之处?

  27. 27

    如何让Python在int输入上工作,将它们转换为两个小数点?

  28. 28

    试图获取两个不同格式日期之间的日差,给出小数点

  29. 29

    试图以浮点数结尾两个小数点,但保持为0.0

热门标签

归档