Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/375.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 从字符串中删除字符的所有匹配对_Java_String - Fatal编程技术网

Java 从字符串中删除字符的所有匹配对

Java 从字符串中删除字符的所有匹配对,java,string,Java,String,我正在尝试制作一个删除重复字符的代码。例如,如果我们有一个字符串“aabacdc”,我们希望将其设置为“abd”。如果该字符在字符串中存在两次,那么我们将删除这两个字符,就像在上面的示例中所做的那样。'a'在我们的字符串中出现了3次,所以我们只删除了2个a,剩下1个 在这段代码中,我试图使用两个嵌套的for循环-first for loop将第一个字符与其他字符进行比较。如果字符串中有重复的字符,则只需删除这两个字符。如何修复此代码 public static void main(String[

我正在尝试制作一个删除重复字符的代码。例如,如果我们有一个字符串
“aabacdc”
,我们希望将其设置为
“abd”
。如果该字符在字符串中存在两次,那么我们将删除这两个字符,就像在上面的示例中所做的那样。
'a'
在我们的字符串中出现了3次,所以我们只删除了2个
a
,剩下1个

在这段代码中,我试图使用两个嵌套的
for
循环-first for loop将第一个字符与其他字符进行比较。如果字符串中有重复的字符,则只需删除这两个字符。如何修复此代码

public static void main(String[] args) {
    Scanner input = new Scanner(System.in);
    String str2 = input.nextLine();

    StringBuilder str = new StringBuilder(str2);

    for (int k = 0; k < str.length() - 1; k++) {
        for (int i = 1; i < str.length() - 1; i++) {
            if (str.charAt(k) == str.charAt(i)) {
                str.deleteCharAt(k);
                str.deleteCharAt(i);
            } 
        }
    }

    System.out.println(str);
}
publicstaticvoidmain(字符串[]args){
扫描仪输入=新扫描仪(System.in);
字符串str2=input.nextLine();
StringBuilder str=新的StringBuilder(str2);
对于(int k=0;k
根据预期输出,我对您尝试执行的操作的解释是,您希望一次从字符串1对中删除字符。因此,如果字符串中有奇数,则应保留1,如果有偶数,则应保留0

在按索引进行迭代时,无论何时从结构中删除元素,都需要向后循环结构,以便在删除元素时索引值不会移动。这意味着您应该只删除外部循环当前所在或已经看到的元素(即只删除索引
=i
处的元素)

扫描仪输入=新扫描仪(System.in);
String str=input.nextLine();
StringBuilder sb=新的StringBuilder(str);
对于(int i=sb.length()-2;i>=0;i--){
对于(int j=i+1;j

根据预期输出,我对您尝试执行的操作的解释是,您希望一次从字符串对中删除1个字符。因此,如果字符串中有奇数,则应保留1,如果有偶数,则应保留0

在按索引进行迭代时,无论何时从结构中删除元素,都需要向后循环结构,以便在删除元素时索引值不会移动。这意味着您应该只删除外部循环当前所在或已经看到的元素(即只删除索引
=i
处的元素)

扫描仪输入=新扫描仪(System.in);
String str=input.nextLine();
StringBuilder sb=新的StringBuilder(str);
对于(int i=sb.length()-2;i>=0;i--){
对于(int j=i+1;j

您从未向我们提供保留信函的逻辑。另外,如果有六个
a
存在,我们会保留一个或两个吗?您的意思是abcd作为输出而不仅仅是abd吗?因为你的脑子里有个“c”input@TimBiegeleisen所以,假设我们输入了“aaa”,它必须打印“a”。2) 如果我们输入“aabb”,它将不打印任何内容。3) 这意味着如果我们让这个字符在一个字符串中出现两次,那么就删除它。3) 如果我们输入“aabbacc”,它将打印“a”它是二进制的吗?奇数的
a
stay,偶数的
a
-删除它?@ElliottFrisch确切地说,你从来没有给过我们保留字母的逻辑。另外,如果有六个
a
存在,我们会保留一个或两个吗?您的意思是abcd作为输出而不仅仅是abd吗?因为你的脑子里有个“c”input@TimBiegeleisen所以,假设我们输入了“aaa”,它必须打印“a”。2) 如果我们输入“aabb”,它将不打印任何内容。3) 这意味着如果我们让这个字符在一个字符串中出现两次,那么就删除它。3) 如果我们输入“aabbacc”,它将打印“a”它是二进制的吗?
a
的奇数保持,
a
的偶数-删除它?@ElliottFrisch如果删除
i
处的字符,则
i
右侧的所有字符将向左移动,这意味着下一个字符将位于
i
,而不是
i+1
。向后迭代可防止该移位出现问题,因为下一个字符将始终位于
i-1
。如果删除
i
处的字符,则
i
右侧的所有字符将向左移位,这意味着下一个字符将位于
i
,而不是
i+1
。向后迭代可以防止这种转换成为问题,因为下一个字符将始终位于
i-1
Scanner input = new Scanner(System.in);
String str = input.nextLine();
StringBuilder sb = new StringBuilder(str);

for (int i = sb.length() - 2; i >= 0; i--) {
    for (int j = i + 1; j < sb.length(); j++) {
        if (sb.charAt(i) == sb.charAt(j)) {
            sb.deleteCharAt(j);
            sb.deleteCharAt(i);
            break;
        }
    }
}

System.out.println(sb);