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);