Java 抛出意外的复杂错误

Java 抛出意外的复杂错误,java,string,list,exception,Java,String,List,Exception,我正在编写一个相当简单的Java程序,提示用户输入两个字符串,然后根据第二个字符串格式化第一个字符串并相应地输出 该处理通过删除第一个字符串中与第二个字符串中的每个字符对应的每个字符来进行,并在预期更改后输出第一个字符串。这可能看起来令人困惑和难以理解 例如: 假设我们有以下两个字符串作为输入: lennon 自然对数 输出: eo 从第一个字符串中删除所有出现的字符“L”和“n”后(不考虑大小写) 这是相关的程序: BufferedReader br = new BufferedReade

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

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

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

lennon
自然对数
输出:

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);
}
BufferedReader br=新的BufferedReader(新的InputStreamReader(System.in));
System.out.format(“输入2个字符串,字符:%n”);
字符串s1=br.readLine();
字符串s2=br.readLine();
列表l=新的ArrayList();
对于(int i=0;i
它抛出了一个
索引outofboundsexception
。我觉得这很奇怪,也很困惑,我觉得自己陷入了僵局。也许这是个愚蠢的错误。任何形式的帮助都将不胜感激。

试试看

       l.remove(Character.valueOf(ch));
       l.remove(Character.valueOf(Character.toLowerCase(ch)));
我猜您的代码中使用了
List.remove(int)
,其中int是列表中的索引


stacktrace将给出发生异常的正确行号。始终检查那个一个。

您也可以尝试将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);
        }
String s1=“列侬”;
字符串s2=“Ln”;
s1=s1.toLowerCase();
s2=s2.toLowerCase();
列表l=新的ArrayList();
对于(int i=0;i
您的程序还需要进行几项更改才能正常运行。无论如何,请尝试以下代码:

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);
           }
    }
BufferedReader br=新的BufferedReader(新的InputStreamReader(System.in));
System.out.format(“输入2个字符串,字符:%n”);
字符串s1=br.readLine();
字符串s2=br.readLine();
列表l=新的ArrayList();

对于(int i=0;iThats a job for regex replace and not nested for/while loops顺便说一句,您的程序不会完全按照您的预期运行。请尝试以下字符串:
lennon
LN
,然后找出原因。哎呀……在进入while循环之前,有点错过了使相关的大小写一致的机会,呃。Ta,伙计!