簡體   English   中英

在沒有重復Java的Char數組中輸入

[英]Input in Char Array without Duplicates Java

想象一下,我有這個:

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]= 

所以現在我不知道如何刪除重復項和空白符號。

您可以使用LinkedHashSet<Character> (以維護插入順序)。

  1. 使用String對象上的replaceAll方法替換空格
  2. 在char數組中轉換String
  3. 對於每個char,將其添加到Set (一個Set不允許重復)
  4. 使用toArray(T[] object)方法獲取Character數組。

所以它會是這樣的:

        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        }

將內容傳輸到LinkedHashSet 它將為您刪除重復項! 這是一個開始的例子

使用泛型character Hashset

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

您可以使用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();

這將只添加沒有任何空白的字符到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))

你可以試試這個:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM