【问题标题】:Replacing actual numbers (1,2,3, etc) with a written number (one two three)用书面数字(一二三)替换实际数字(1、2、3等)
【发布时间】:2015-02-24 23:08:16
【问题描述】:

我一直在解决一个问题,但遇到了一个小问题。我需要用书面数字替换句子中的实际数字。

一个例子:

堆栈溢出是编程帮助的数字1

需要成为

堆栈溢出是编程帮助的一个位置

此外,这只需要对数字 0-9 执行此操作。感谢您的帮助,任何指导或指向正确的 api 将不胜感激

【问题讨论】:

  • 到目前为止你尝试过什么?我们不是来为人们做功课的(我说的是作为一名前实验室助手,他教过一个实验室,你要求的是任务)。不过,我们很乐意帮助您调试您已经尝试过的东西。
  • 我不认为有这个 API。然后,您需要手动完成:将 1 替换为 1,将 2 替换为 2,等等。
  • 使用enum 作为您的数字。
  • 简单地使用地图,根据地图的keyset使用正则表达式替换操作。
  • 您需要支持的最大数量是多少?

标签: java string stringbuilder


【解决方案1】:

我认为“我认为”但也许您可以验证。

所以基本上它会循环一个句子来查找数字。我正在考虑一系列 for 循环,例如

 for (int i=0; i < strToWork.length(); i++)
       {
           if (strToWork.charAt(i) == '1')
             {
                strToWork.replace(i,i+1,"one")
                  }
       }

【讨论】:

    【解决方案2】:

    使用String 的replaceAll(String,String) 方法。下面是一个例子:

    String myString = "This is 1 great tool for 3 people to use!";
    System.out.println(myString.replaceAll("1", "one").replaceAll("2", "two"));
    

    如果你真的想,你可以使用Pattern,因为replaceAll的第一个参数无论如何都是一个正则表达式..

    【讨论】:

    • 这里不处理“堆栈溢出是编程帮助的第11位”的情况。 OP 只要求处理 0-9。
    • replaceAll 使用正则表达式。只需为此使用replace
    • @Jason OP 并不关心 11。事实上,根据我阅读 OP 的方式,11 可以说“一个人”。当然,我本可以使用像某些答案这样的复杂方法,但那将是矫枉过正。就目前而言,我故意使用 replaceAll 副替换(并声明它使用正则表达式),因为我想让 OP 思考他们如何可能使用正则表达式(模式!),然后可能是使用模式机制的字符串开关(find()、start() 和 end()) 可能比 .replace(blah,blah).replace(blach,blach) 等做得更好。
    • @DavidConrad 我把它放进去是为了让我可以放入关于 Pattern 的预告片,希望 OP 会研究他将来可以将它用于此类事情的酷方法。
    猜你喜欢
    • 1970-01-01
    • 2011-01-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-05
    相关资源
    最近更新 更多