抛出了意外的令人困惑的错误

时间:2014-09-11 15:26:01

标签: java string list exception

我正在编写一个相当简单的Java程序,提示用户输入2个字符串,然后根据第二个字符串格式化第一个字符串并相应地输出。

该处理通过删除第一个字符串中与第二个字符串中的每个字符相对应的每个字符并在预期的改变之后输出第一个字符串来继续。这可能看起来令人困惑和难以理解。

例如:
假设我们有以下2个字符串作为输入:

lennon
Ln

输出:

eo

删除每次出现的字符'L'和&来自第一个字符串的'n'(不考虑大小写)

这是相关的计划:

BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
System.out.format("Enter 2 Strings, schmuck:%n");
String s1 = br.readLine();
String s2 = br.readLine();
List<Character> l = new ArrayList<>();
for(int i = 0; i < s1.length(); i++)
{
    l.add(s1.charAt(i));
}
char ch;
for(int i = 0; i < s2.length(); i++)
{
    ch=s2.charAt(i);

    while((l.indexOf(ch)) != -1)
    {
        if(Character.isUpperCase(ch))
        l.remove(ch);
        l.remove(Character.toLowerCase(ch));
    }
}
for(Character c : l)
{
    System.out.printf("%c", c);
}

它正在抛出一个IndexOutOfBoundsException。我发现它令人毛骨悚然,令人困惑,并感到我陷入了僵局。也许这是一个愚蠢的错误。任何形式的帮助都会受到狂热的赞赏。

3 个答案:

答案 0 :(得分:2)

尝试

       l.remove(Character.valueOf(ch));
       l.remove(Character.valueOf(Character.toLowerCase(ch)));

我的猜测是你的代码中使用了List.remove(int),其中int是列表中的索引。

堆栈跟踪将在异常发生时给出正确的行号。一定要检查一下。

答案 1 :(得分:0)

您也可以尝试将2个字符串转换为大写或小写,然后在第二个字符串中获取每个字符的索引,如果它不等于-1则删除它

        String s1 = "lennon";
        String s2 = "Ln";

        s1 = s1.toLowerCase();
        s2 = s2.toLowerCase();
        List<Character> l = new ArrayList<>();
        for (int i = 0; i < s1.length(); i++) {
            l.add(s1.charAt(i));
        }
        char ch;
        for (int i = 0; i < s2.length(); i++) {
            ch = s2.charAt(i);

            while ((l.indexOf(ch)) != -1) {
                l.remove(l.indexOf(ch));
            }
        }
        for (Character c : l) {
            System.out.printf("%c", c);
        }

答案 2 :(得分:0)

程序运行需要进行更多更改。无论如何,请尝试以下代码:

BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        System.out.format("Enter 2 Strings, schmuck:%n");
        String s1=br.readLine();
        String s2=br.readLine();
        List<Character> l = new ArrayList<Character>();
        for(int i=0;i<s1.length();i++)
        {
            l.add(s1.charAt(i));
        }
        char ch;
       for(int i=0;i<s2.length();i++)
       {
           ch=s2.charAt(i);

           while((l.indexOf(ch))!=-1 || (l.indexOf(Character.toLowerCase(ch)))!=-1)
           {
               if(Character.isUpperCase(ch))
              l.remove(new Character(Character.toLowerCase(ch)));
               l.remove(new Character(ch));
           }
       }
       for(Character c : l)
           {
           System.out.printf("%c", c);
           }
    }