尝试制作一个程序,从混乱的字符串中重建字符串中的数字,但出现索引越界错误

问题描述 投票:0回答:1
  1. 从英语重建原始数字

给定一个包含数字 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;
}

错误具体是

Error Showing 问题链接

java string stringbuilder
1个回答
0
投票

在某些组合中,您会删除错误的字符,例如

fournine
,您在其中输入
one
的删除序列,其中文本中没有实际的
one
。之后您剩下的文字是
frin
。这让您的解决方案尝试删除
five
的字符,但在尝试删除
v
时失败。

indexOf 也可以处理多个字符,例如

indexOf("one")
可以在这里与子字符串一起使用。替代方法是使用startsWith(...) 和replaceAll。

© www.soinside.com 2019 - 2024. All rights reserved.