2015-06-16 96 views
-1
import java.util.Scanner; 

public class StringWithoutDuplicate { 

    public static void stringWithoutDuplicate(String s1) 
    { 
     int n = s1.length(); 
     int i = 0; 
     while(i<n) 
     { 
      if(s1.charAt(i) == s1.charAt(i+1)) 
      { 
       if(s1.charAt(i) == s1.charAt(n-1)) 
       { 
        System.out.println(s1.charAt(i)); 
       } 
       i++; 
      } 
      else if(s1.charAt(i) != s1.charAt(i+1)) 
      { 
       if(s1.charAt(i) == s1.charAt(n-1)) 
       { 
        System.out.println(s1.charAt(i)); 
       } 
       System.out.println(s1.charAt(i));; 
       i++; 
      } 
     } 
    } 

    public static void main(String[] args) { 
     Scanner s = new Scanner(System.in); 
     s.useDelimiter(","); 
     String s1 = s.next(); 

     System.out.println(s1); 

     stringWithoutDuplicate(s1); 

    } 
} 

该代码给出了输出,但有一个例外 请告诉我在我的代码中的错误以及纠正它的方法。 我不想改变我的代码的逻辑,所以只用这个逻辑来解决它。删除字符串中的重复字符

+0

你有什么异常? –

+0

你得到的错误是因为s1.charAt(i + 1)。在某些时候,i + 1会超过s1的长度。 – Shar1er80

回答

0

错误:

i的范围是从0 to (n-1)这是相同的字符指数在你的字符串s1的范围内。这是对的。

但是你while loop的最后一次迭代中,i = n-1

在这一点上,s1.charAt(i+1)变得一样s1.charAt(n)。这应该是一个错误。

0
public static void stringWithoutDuplicate(String s1) { 
    int prev = -1; 
    for (int i = 0, size = s1.length(); i < size; ++i) { 
     char c = s1.charAt(i); 
     if (c != prev) { 
      System.out.println(c); 
      prev = c; 
     } 
    } 
}