给定一个包含数字 0-9 的无序英文表示的字符串 s,按升序返回数字。
我尝试了 Java 中的代码,但它以某种方式抛出索引超出界限的错误
它适用于其他输入,但会引发此输入的错误
公共静态字符串originalDigits(字符串s){
StringBuilder st = new StringBuilder(s);
StringBuilder num = new StringBuilder();
while(st.length()!=0){
if (st.indexOf("z")!=-1){
num.append("0");
st.deleteCharAt(st.indexOf("z"));
st.deleteCharAt(st.indexOf("e"));
st.deleteCharAt(st.indexOf("r"));
st.deleteCharAt(st.indexOf("o"));
}
if (st.indexOf("o")!=-1 && st.indexOf("n")!=-1){
num.append("1");
st.deleteCharAt(st.indexOf("o"));
st.deleteCharAt(st.indexOf("n"));
st.deleteCharAt(st.indexOf("e"));
}
if (st.indexOf("w")!=-1){
num.append("2");
st.deleteCharAt(st.indexOf("t"));
st.deleteCharAt(st.indexOf("w"));
st.deleteCharAt(st.indexOf("o"));
}
if (st.indexOf("h")!=-1 && st.indexOf("r")!=-1){
num.append("3");
st.deleteCharAt(st.indexOf("t"));
st.deleteCharAt(st.indexOf("h"));
st.deleteCharAt(st.indexOf("r"));
st.deleteCharAt(st.indexOf("e"));
st.deleteCharAt(st.indexOf("e"));
}
if (st.indexOf("u")!=-1){
num.append("4");
st.deleteCharAt(st.indexOf("f"));
st.deleteCharAt(st.indexOf("o"));
st.deleteCharAt(st.indexOf("u"));
st.deleteCharAt(st.indexOf("r"));
}
if (st.indexOf("f")!=-1){
num.append("5");
st.deleteCharAt(st.indexOf("f"));
st.deleteCharAt(st.indexOf("i"));
st.deleteCharAt(st.indexOf("v"));
st.deleteCharAt(st.indexOf("e"));
}
if (st.indexOf("x")!=-1){
num.append("6");
st.deleteCharAt(st.indexOf("s"));
st.deleteCharAt(st.indexOf("i"));
st.deleteCharAt(st.indexOf("x"));
}
if (st.indexOf("v")!=-1){
num.append("7");
st.deleteCharAt(st.indexOf("s"));
st.deleteCharAt(st.indexOf("e"));
st.deleteCharAt(st.indexOf("v"));
st.deleteCharAt(st.indexOf("e"));
st.deleteCharAt(st.indexOf("n"));
}
if (st.indexOf("g")!=-1){
num.append("8");
st.deleteCharAt(st.indexOf("e"));
st.deleteCharAt(st.indexOf("i"));
st.deleteCharAt(st.indexOf("g"));
st.deleteCharAt(st.indexOf("h"));
st.deleteCharAt(st.indexOf("t"));
}
if (st.indexOf("n")!=-1){
num.append("9");
st.deleteCharAt(st.indexOf("n"));
st.deleteCharAt(st.indexOf("i"));
st.deleteCharAt(st.indexOf("n"));
st.deleteCharAt(st.indexOf("e"));
}
System.out.println(num);
}
String num1 = new String(num);
return num1;
}
错误具体是
在某些组合中,您会删除错误的字符,例如
fournine
,您在其中输入 one
的删除序列,其中文本中没有实际的 one
。之后您剩下的文字是frin
。这让您的解决方案尝试删除 five
的字符,但在尝试删除 v
时失败。
indexOf 也可以处理多个字符,例如
indexOf("one")
可以在这里与子字符串一起使用。替代方法是使用startsWith(...) 和replaceAll。