[英]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.