2017-07-19 19 views
-1

为代表的数字编号,//我们需要xyzoneyctwothreefourvone转换为数字:1,234,1将字符串转换成在字母表中的String

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

+0

您的代码不能编译,它缺少回报 –

回答

3

这是因为只要(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

+1

只是忙着写这段代码哈哈+1 –

+0

谢谢拉曼的伟大解决方案!但由于这是我的面试问题,我们不应该使用“replaceAl”。我们可以有没有ReplaceAll的解决方案? – Anish

相关问题