我的字符串值为||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/