【问题标题】:Convert a string with numbers represented in alphabets to numbers in a String将具有以字母表示的数字的字符串转换为字符串中的数字
【发布时间】:2017-12-24 03:27:29
【问题描述】:

//我们需要将xyzoneyctwothreefourvone转换为数字:1,234,1

public static void cal(String s){

    HashMap<String, String> map= new HashMap<String, String>();
    map.put("zero", "0");
    map.put("one", "1");
    map.put("two", "2");
    map.put("three", "3");
    map.put("four", "4");
    s = "xyzoneyctwothreefourvone";
    int temp;
    StringBuilder strB = new StringBuilder();
    ArrayList<StringBuilder> list = new ArrayList<StringBuilder>();
    StringBuilder strB1 = new StringBuilder();
    boolean isNum = false;

    for (int i = 0; i <= s.length() - 1; i++) {
        strB.append(s.charAt(i));
        if (strB.length() >= 3 && map.containsKey(strB.toString())) {
                isNum = true;
                strB1.append(map.get(strB.toString().toLowerCase()));
                strB = new StringBuilder();
            } else if (strB.length() > 5) {
                isNum = false;
                strB1.append("+");
                strB = new StringBuilder();
                i = i - 5;
            }
        }       

    System.out.println(strB1.toString());

}

预期输出:+++1++234+1; 电流输出:+++1++234

【问题讨论】:

  • 您的代码无法编译,缺少返回

标签: java string algorithm hashmap


【解决方案1】:

这是因为只要满足(strB.length() &gt; 5) 条件,就会执行您的 else 语句。但最后,您的strB 包含字符串vone,因此它没有足够的字符来执行此else 语句。

但是,您也可以使用此代码实现此目的。它使事情变得简单:

for(Map.Entry<String, String> entry : map.entrySet()) {
    s = s.replaceAll(entry.getKey(), entry.getValue());
}

s = s.replaceAll("[a-z]", "+");

输出

+++1++234+1

查看演示:https://ideone.com/Mjo9D5

【讨论】:

  • 感谢拉曼提供的出色解决方案!然而,由于这是我的面试问题,我们不应该使用“replaceAl”。我们可以有没有 ReplaceAll 的解决方案吗?
猜你喜欢
  • 2018-02-01
  • 2021-01-09
  • 1970-01-01
  • 1970-01-01
  • 2014-10-24
  • 1970-01-01
  • 1970-01-01
  • 2012-06-24
相关资源
最近更新 更多