删除字符串中的重复字符

时间:2013-05-01 15:15:47

标签: java duplicate-removal

您好我需要修复此代码以删除字符串中立即重复的字符。例如:如果我键入aaabbbcccdeeff,它必须在结尾返回abcdef。但是在类中的计算机上它会返回“超出范围(数字)”的内容,该数字取决于我使用的字符数。然而,在我的Mac上它只返回一个像3这样的数字作为输出并且没有给出错误消息。我在Eclipse上。

请帮助,我不明白教授说了什么,他很少帮助。代码(教授有点帮助):

package firstProgramSimple;

import java.awt.Toolkit;
import java.util.Scanner;

public class SimpleVersion {

  public static void main(String[] args) {  

    Scanner kb = new Scanner(System. in );
    System.out.println("Entre String");
    String string = kb.nextLine();
    //System.out.println(string);           
    int length = string.length();
    for (int i = 1; i < length; i++) {
      if (string.charAt(i) != string.charAt(i - 1)) {
        System.out.print(i);
      } else if (string.charAt(i) != string.charAt(i)) {
        System.out.print(i);
      }
    }
  }
}

3 个答案:

答案 0 :(得分:0)

您正在打印循环计数器,而不是计数器位置的char值:

System.out.print(i);

应该是:

System.out.print(string.charAt(i));

对于大小为&lt;的输入,您将获得arrayOutOfBoundsException。 2.初始化字符串后,您可能希望添加此行:

if(string == null || string.length() < 2){
    System.out.println(string);
    return;
}

这样的事情:

public static void main(String[] args) {  

    Scanner kb = new Scanner(System. in );
    System.out.println("Entre String");
    String string = kb.nextLine();

    //System.out.println(string);           
    int length = string.length();
    if(length < 2) {
        System.out.println(string);
        return;
    }

    System.out.print(string.charAt(0));
    for (int i = 1; i < length; i++) {
        if (string.charAt(i) != string.charAt(i - 1)) {
            System.out.print(string.charAt(i));
          } 
    }
}

答案 1 :(得分:0)

您需要打印string.charAt(i)而不是i

此外,这段代码是不必要的,因为它总是返回false:

//string.charAt(i) is always equal to itself
else if ( string.charAt(i) != string.charAt( i )) {
    System.out.print(i);

由于您从i = 1开始,因此永远不会打印索引char处的0。在for - 循环之前,您应该添加以下行:

System.out.print(string.charAt(0));

答案 2 :(得分:0)

只需将下面的for循环替换为:

    System.out.print(string.charAt(0));
    for (int i = 1; i < length; i++) {
        if (string.charAt(i) != string.charAt(i - 1)) {
            System.out.print(string.charAt(i));
        }
    }

这个想法是,首先打印起始字符,然后在 i 位置打印字符,只要它与前一个字符不同。简单!