如何在字符数组中打印字符而不重复?

时间:2017-02-25 18:24:21

标签: java

我被要求编写一个程序来打印字符数组中的值。此数组包含重复值,但输出不应包含重复字符。不要使用Set 。这就是我创造的。如果还有其他有效的方法可以让我知道。

public class RemoveDuplication {
  public static void main (String[] args){
    char[] a= new char[]{'a', 'b', 'c', 'a', 'b', 'c', 'a', 'b', 'c', 'a', 'b', 'c'};
    String s=Character.toString(a[0]);

    for (int i=1; i<a.length; i++) {
      if ((s.indexOf(a[i])) == -1) {
        s = s + Character.toString(a[i]);
      } else {
      }
    }
    // if you want character array as result 
    char[] result = s.toCharArray();
    System.out.println(result);
  }
}

5 个答案:

答案 0 :(得分:1)

你太过分了。

请选择:

StringBuilder builder = new StringBuilder().append(a[0]);

然后append()到该构建器对象;最后;致电builder.toString()。而不是用s字符串变量做的所有有趣的事情。

你在String和Character之间往返的代码和使用+代替字符串的代码如上所述;非常复杂的事情。

答案 1 :(得分:1)

如果您使用Set对象,它会为您执行此操作。

Set<Character> s = new HashSet<>();
s.add('c');
s.add('c');
//c was only added once

然后像这样迭代:

for(Character c: s)
{
    System.out.println(c);
}

答案 2 :(得分:0)

对字符进行流式处理,仅过滤到不同的代码点,然后在StringBuilder中收集代码点,最后打印出来:

System.out.println(
    str.chars().distinct().boxed()
        .collect(Collector.of(StringBuilder::new,
                    StringBuilder::appendCodePoint,
                    StringBuilder::append)));

答案 3 :(得分:0)

每次听到独特元素时,我都会想到。所以这是使用sets最简单的实现:

char[] a= new char[]{'a', 'b', 'c', 'a', 'b', 'c', 'a', 'b', 'c', 'a', 'b', 'c'};

Set<Character> set = new HashSet<Character>(); //declare Set of Character type
for(char c : a)
        set.add(c);           //Add chars in 'a' to the set 

System.out.println(set);
  

输出:[a,b,c]

答案 4 :(得分:0)

你可以做些什么来加速这就像是,使用二进制搜索检查字符C是否在输出的字符数组A(不是打印)中。如果字符C不在列表中,则打印字符C,然后将字符C插入(排序)为A(以便能够使用二进制搜索)。