在没有重复Java的Char数组中输入

时间:2013-12-19 11:30:44

标签: java arrays string char duplicates

想象一下,我有这个:

String input = "AB   BC";   //  ( Just an Example)

我想把这个String放到一个char数组中,但我想没有重复项 和我的char数组中的空白符号。到目前为止我的解决方案:

String input = "AB  BC"

char array[]=input.toCharArray();
for(int i=0;i<array.length;i++){
    System.out.println("Data at ["+i+"]="+array[i]);
}

输出是:

This is my input String AB  BC 
This is the content of my Char Array
Data at [0]=A
Data at [1]=B
Data at [2]= 
Data at [3]= 
Data at [4]=B
Data at [5]=C
Data at [6]= 

所以现在我不知道如何删除重复项和空白符号。

6 个答案:

答案 0 :(得分:1)

您可以使用LinkedHashSet<Character>(以维持广告订单顺序)。

  1. 使用String对象上的replaceAll方法替换空格
  2. 在char数组中转换字符串
  3. 对于每个字符,将其添加到Set(一个集不允许重复)
  4. 使用toArray(T[] object)方法取回Character数组。
  5. 所以它会是这样的:

            String input = "AB  BC";
            input = input.replaceAll("\\s+", "");
            Set<Character> s = new LinkedHashSet<>();
    
            for(char c : input.toCharArray())
                s.add(c);
    
            Character [] array = s.toArray(new Character[0]);
            System.out.println(Arrays.toString(array));
    

    输出:

    [A, B, C]
    

    如果你想拥有一个可以使用的原语数组(注意你必须使用apache commons库)char[] arr = ArrayUtils.toPrimitive(array);

    这是源代码:

    2647      public static char[] toPrimitive(Character[] array) {
    2646            if (array == null) {
    2647                return null;
    2648            } else if (array.length == 0) {
    2649                return EMPTY_CHAR_ARRAY;
    2650            }
    2651            final char[] result = new char[array.length];
    2652            for (int i = 0; i < array.length; i++) {
    2653                result[i] = array[i].charValue();
    2654            }
    2655            return result;
    2656        }
    

答案 1 :(得分:1)

将内容转移到LinkedHashSet。它将为您删除重复项! 这是一个example开始。

答案 2 :(得分:0)

使用通用类型Hashset

character
 HashSet<Character> m=new HashSet<Character>(); 

答案 3 :(得分:0)

您可以使用LinkedHashSet,但我假设您最后需要一个数组。你可以这样做。

String input = ...
StringBuilder sb = new StringBuilder();
BitSet seen = new BitSet(); // more compact than a HashSet<Character>
seen.set(' ');              // pretend we have seen space already
for(char ch: input.toCharArray()) {
    if(!seen.get(ch)) {
        sb.append(ch);
        seen.set(ch);
    }
}
char[] unique = sb.toString().toCharArray();

答案 4 :(得分:0)

这将只添加没有任何空白的字符到hashset

char array[]=input.toCharArray();
Set<Character> m=new LinkedHashSet<Character>();
for(int i=0;i<array.length;i++){
   if(array[i]!=' ')
      m.add(array[i])
}
Character[] text = m.toArray(new Character[0]);
System.out.println(Arrays.toString(text))

答案 5 :(得分:0)

您可以试试这个:

String input = "AB  BC";
char array[]=input.toCharArray();
for(int i=0;i<array.length;i++){
      if(!input.substring(0,i).contains(array[i]+"") && array[i]!=' ')
      System.out.println("Data at ["+i+"]="+array[i]);
}

输出:

Data at [0]=A
Data at [1]=B
Data at [5]=C