我被要求编写一个程序来打印字符数组中的值。此数组包含重复值,但输出不应包含重复字符。不要使用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);
}
}
答案 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(以便能够使用二进制搜索)。