java - 如何删除具有分隔符的字符串中的重复值

标签 java delimiter duplicate-data

我的字符串值为||HelpDesk||IT Staff||IT Staff||Admin||Audit||HelpDesk||

我正在尝试编写应该删除重复项并返回保留分位数的唯一值的代码,如下所示||HelpDesk||IT Staff||Admin||Audit||

我的代码使用 HashSet 来删除重复项,但问题是它正在删除分隔符。如何通过仅删除重复值来保留分隔符。

下面是删除重复项并添加回分隔符后的代码。但不确定是否有简单的方法可以做到这一点。

public static void main(String[] args) {
    TestDuplicates testDuplicates = new TestDuplicates();
    String bRole = "||HelpDesk||IT Staff||IT Staff||Admin||Audit||HelpDesk||";
    List<String> listWithoutDuplicates = new ArrayList<String>();
    String noDup = "";
    List<String> splittedStringList =
        new ArrayList<String>();
    SplitOperations splitOperations =
        new SplitOperations();
    splittedStringList =
            splitOperations.splitString(bRole);
    for (int i = 0; i < splittedStringList.size(); i++) {

        HashSet<String> listToSet = new HashSet<String>(splittedStringList);

        listWithoutDuplicates = new ArrayList<String>(listToSet);


    }
    for(int i=0;i<listWithoutDuplicates.size();i++){
         noDup = noDup + "||"+listWithoutDuplicates.get(i);
        System.out.println(listWithoutDuplicates.get(i));
    } 
    System.out.println("No Duplicate is::"+ noDup+"||");


}

谢谢

最佳答案

您可以使用LinkedHashSet来保留插入顺序。一旦你用“||”分割字符串只需在构造回字符串时添加分隔符即可。

 String s = "||HelpDesk||IT Staff||IT Staff||Admin||Audit||HelpDesk||";
 Set<String> set = new LinkedHashSet<>(Arrays.asList(s.split(Pattern.quote("||"))));
 String noDup = "||";
 for(String st : set) {
     if(st.isEmpty()) continue;
     noDup += st+"||";
 }

或者使用新的 java 8 Stream API :

 String noDup = "||"+
     Arrays.stream(s.split(Pattern.quote("||")))
           .distinct()
           .filter(st -> !st.isEmpty()) //we need to remove the empty String produced by the split
           .collect(Collectors.joining("||"))+"||";

两种方法产生相同的结果(||HelpDesk||IT 人员||管理员||审核||)。

关于java - 如何删除具有分隔符的字符串中的重复值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27329834/

相关文章:

java - java中如何将ArrayList转成String[],Arraylist包含VO对象

java - 如何将json处理为普通类对象?

postgresql - postgres SQL 状态 : 22P02

python - 列表列表中的重复删除

php - 如何从 PHP 中的数组中删除重复值

c - 如何使用 malloc 函数将结构复制到指针中 [C 编程]

java - 使用 DataNucleus 从 MySQL 到 XLS (java)

java - 登录代码中的错误

c++ - 如何将逗号分隔文件的第 n 列存储在数组中?

MySQL LOAD DATA INFILE : works, 但不可预测的行终止符