//我们需要将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
答案 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
参见DEMO:https://ideone.com/Mjo9D5