簡體   English   中英

在Java中從字符串中刪除重復項

[英]Removing the duplicates from the String in java

從java中給定的字符串中刪除重復項
例如:-如果我的字符串是“ cutcopypaste”
那么輸出應為“ uoyase”

輸入:-cutcopypaste;
輸出:-uoyase;
這是我寫的程序。 我應該做些什么改變?
但是我的輸出是這樣的:-cuttcoppyppastte

class Remove {
 public static String remo(String st) {
  char[] ch = st.toCharArray();
  st = "";
  String st1 = "";
  for (int i = 0; i < ch.length; i++) {
   for (int j = 1; j < ch.length; j++) {
    if (ch[i] == ch[j]) {
     st1 = st1 + ch[i];
    } else {
     st = st + ch[i];
    }
   }
  }
  return st;
 }
 public static void main(String[] args) {
  String st1 = "cutcopypaste";
  st1 = remo(st1);
 }
}

您可以使用這種方法將字符串轉換為字符數組,例如.toCharArray()。

然后將char數組轉換為將刪除重復項的集合。

public static Set convertToSet(char[] charArray) { 
// Result hashset 
Set resultSet = new HashSet(); 
for (int i = 0; i < charArray.length; i++) { 
resultSet.add(newCharacter(charArray[i])); 
} 
// Return result 
return resultSet; 
}

如果命令對您來說無關緊要,則可以嘗試以下代碼:

 List<Character> result = input
            .chars()
            .mapToObj(el -> (char) el)
            .collect(Collectors.groupingBy(Function.identity(), Collectors.counting()))
            .entrySet()
            .stream()
            .filter(el -> el.getValue() == 1L)
            .map(Map.Entry::getKey)
            .collect(Collectors.toList());

我的方法是遍歷char數組並記住每個char出現的頻率。 在這種情況下,我們可以使用包裝類型Boolean來為每個字符提供3種可能的狀態: null =尚未發生, true =發生一次, false =發生多次。

為了保持這些狀態,我將使用LinkedHashMap因為它保留了插入順序。 要獲取結果字符串,我們只需遍歷地圖的條目,過濾掉所有不為true的狀態(即發生一次),然后將其連接為字符串。

public class Duplicate {

    public static void main(String[] args) {
        System.out.println(remo("cutcopypaste"));
    }

    public static String remo(String st) {

        Map<Character, Boolean> occurredOnlyOnce = new LinkedHashMap<>(); //preserves insertion order

        for(char c : st.toCharArray()) {
            Boolean occurred = occurredOnlyOnce.get(c);
            if(occurred == null) {
                occurredOnlyOnce.put(c, true);
            } else if(occurred) {
                occurredOnlyOnce.put(c, false);
            }
        }

        return occurredOnlyOnce.entrySet().stream()
            .filter(e -> e.getValue())
            .map(e -> e.getKey().toString())
            .collect(Collectors.joining());
    }

}

暫無
暫無

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

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