Remove duplicate values from a string in java

前端 未结 14 2597
刺人心
刺人心 2020-12-06 05:26

Can anyone please let me know how to remove duplicate values from

String s=\"Bangalore-Chennai-NewYork-Bangalore-Chennai\"; 

and output sh

相关标签:
14条回答
  • 2020-12-06 05:58
    import java.util.HashSet;
    
    public class SplitString {
        public static void main(String[] args) {
            String st = new String("New Delhi-Chennai-New York-Bangalore-Chennai-New Delhi-Chennai-New York");
            StringBuffer stb = new StringBuffer();
    
            HashSet<String> hashset = new HashSet<String>();
            for (String a : st.split("-"))
                hashset.add(a);
    
            Object[] str = (Object[]) hashset.toArray();
    
            for (int i = 0; i < str.length; i++) {
                stb.append(str[i]);
    
                if (i < str.length - 1)
                    stb.append("-");
    
            }
    
            System.out.println(stb);
        }
    }
    
    0 讨论(0)
  • 2020-12-06 06:01

    This does it in one line:

    public String deDup(String s) {
        return new LinkedHashSet<String>(Arrays.asList(s.split("-"))).toString().replaceAll("(^\\[|\\]$)", "").replace(", ", "-");
    }
    
    public static void main(String[] args) {
        System.out.println(deDup("Bangalore-Chennai-NewYork-Bangalore-Chennai"));
    }
    

    Output:

    Bangalore-Chennai-NewYork
    

    Notice that the order is preserved :)

    Key points are:

    • split("-") gives us the different values as an array
    • Arrays.asList() turns the array into a List
    • LinkedHashSet preserves uniqueness and insertion order - it does all the work of giving us the unique values, which are passed via the constructor
    • the toString() of a List is [element1, element2, ...]
    • the final replace commands remove the "punctuation" from the toString()

    This solution requires the values to not contain the character sequence ", " - a reasonable requirement for such terse code.

    Java 8 Update!

    Of course it's 1 line:

    public String deDup(String s) {
        return Arrays.stream(s.split("-")).distinct().collect(Collectors.joining("-"));
    }
    

    Regex update!

    If you don't care about preserving order (ie it's OK to delete the first occurrence of a duplicate):

    public String deDup(String s) {
        return s.replaceAll("(\\b\\w+\\b)-(?=.*\\b\\1\\b)", "");
    }
    
    0 讨论(0)
  • 2020-12-06 06:01

    I'd prefer this which is simpler than all of the above.

    public void removeDuplicates() {
      String myString = "Bangalore-Chennai-NewYork-Bangalore-Chennai";
    
      String[] array = myString.split("-");
    
      Set<String> hashSet = new HashSet<String>(Arrays.asList(array));
    
      String newString = StringUtils.join(hashSet, "-");        
    }
    
    0 讨论(0)
  • 2020-12-06 06:03
    public static String removeDuplicates(String txt, String splitterRegex)
    {
        List<String> values = new ArrayList<String>();
        String[] splitted = txt.split(splitterRegex);
        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < splitted.length; ++i)
        {
            if (!values.contains(splitted[i]))
            {
                values.add(splitted[i]);
                sb.append('-');
                sb.append(splitted[i]);
            }
        }
        return sb.substring(1);
    
    }
    

    Usage:

    String s = "Bangalore-Chennai-NewYork-Bangalore-Chennai";
    s = removeDuplicates(s, "\\-");
    System.out.println(s);
    

    Prints:

    Bangalore-Chennai-NewYork
    
    0 讨论(0)
  • 2020-12-06 06:03
    StringBuilder builderWord = new StringBuilder(word);
    for(int index=0; index < builderWord.length(); index++) {
        for(int reverseIndex=builderWord.length()-1; reverseIndex > index;reverseIndex--) {
            if (builderWord.charAt(reverseIndex) == builderWord.charAt(index)) {
                builderWord.deleteCharAt(reverseIndex);
            }
        }
    }
    return builderWord.toString();
    
    0 讨论(0)
  • 2020-12-06 06:06
    static String RemoveDuplicateCharInString(String s){
        for (int i = 0; i < s.length(); i++) {
            if((s.substring(i+1)).indexOf(s.charAt(i))!=-1){
                s=s.substring(0,i+1)+(s.substring(i+1)).replaceAll(""+s.charAt(i),"");
            }
        }
        return s;
    }
    
    0 讨论(0)
提交回复
热议问题