【问题标题】:Removing the duplicates from the String in java从java中的String中删除重复项
【发布时间】:2017-03-13 11:02:12
【问题描述】:

从java中给出的字符串中删除重复项
例如:- 如果我的字符串是“cutcopypaste”
那么输出应该是“uoyase”

输入:- 剪切复制粘贴;
输出:- 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);
 }
}

【问题讨论】:

    标签: java string duplicates


    【解决方案1】:

    您可以使用这种方法将字符串转换为字符数组,例如 .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; 
    }
    

    【讨论】:

    • 但我不想要重复的实例。这意味着如果 c 出现两次,它不应该打印字母 c。
    • 这就是我将 char 数组的元素移动到一组字符的原因。并且在 java 中设置不允许重复值。这里有什么问题
    【解决方案2】:

    如果订单对你来说不重要,那么你可以试试这段代码:

     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());
    

    【讨论】:

      【解决方案3】:

      我的方法是遍历 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());
          }
      
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-11-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-07-10
        • 1970-01-01
        • 2014-04-16
        相关资源
        最近更新 更多