繁体   English   中英

将字母表示的数字转换为字符串中的数字

[英]Convert a string with numbers represented in alphabets to numbers in a String

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

公共静态无效值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

这是因为只要满足(strB.length() > 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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM