从java字符串数组中获取不同的元素

从java字符串数组中获取不同的元素,java,arrays,string,Java,Arrays,String,我有一个字符串数组,如下所示 String [] exmp = {"Example ExamPle", "Example"}; 我想从上面的数组中获得不同的元素,而不考虑字符大小写 我需要得到上面数组的以下输出。 “示例” 我已尝试使用以下代码 LinkedHashSet<String> set = new LinkedHashSet<String>(); String [] exmp = {"Example ExamPle", "Example"}; for(St

我有一个字符串数组,如下所示

String [] exmp = {"Example ExamPle", "Example"};
我想从上面的数组中获得不同的元素,而不考虑字符大小写

我需要得到上面数组的以下输出。 “示例”

我已尝试使用以下代码

LinkedHashSet<String> set = new LinkedHashSet<String>();

String [] exmp = {"Example ExamPle", "Example"};

for(String s : exmp) {

String unqWrds = Arrays.stream(s.split("\\s+")).distinct().collect(Collectors.joining(" "));

set.add(unqWrds);

}
LinkedHashSet=newLinkedHashSet();
字符串[]exmp={“示例”,“示例”};
for(字符串s:exmp){
字符串unqWrds=Arrays.stream(s.split(\\s+)).distinct().collect(collector.joining(“”));
set.add(unqWrds);
}
但由于大小写的不同,目前我正在将整个字符串添加到集合中 “示例”“示例”

请您在这里提出建议。

试试:

String unqWrds = Arrays.stream(s.split("\\s+")).reduce("", (x, y) -> x.toUpperCase().contains(y.toUpperCase()) ? x : x + " " + y);
试试看:

String unqWrds = Arrays.stream(s.split("\\s+")).reduce("", (x, y) -> x.toUpperCase().contains(y.toUpperCase()) ? x : x + " " + y);

忽略案例部分可以这样做:

String unqWrds = Arrays.stream(s.split("\\s+")).map(String::toLowerCase).distinct().collect(Collectors.joining(" "));

忽略案例部分可以这样做:

String unqWrds = Arrays.stream(s.split("\\s+")).map(String::toLowerCase).distinct().collect(Collectors.joining(" "));

根据问题中的示例代码,您希望在空格上拆分字符串,尽管您在问题中从未说过

然后尝试使用
distinct()

要获得您想要的结果:

// Using loops
public static Set<String> distinctWords(String... input) {
    Set<String> distinct = new TreeSet<>(String.CASE_INSENSITIVE_ORDER);
    for (String s : input)
        for (String word : s.trim().split("\\s+"))
            distinct.add(word);
    return distinct;
}
//使用循环
公共静态集distinctWords(字符串…输入){
Set distinct=new TreeSet(String.CASE不区分大小写\u顺序);
for(字符串s:输入)
用于(字符串字:s.trim().split(\\s+))
添加(单词);
回归清晰;
}
//使用流
公共静态集distinctWords(字符串…输入){
返回流.of(输入)
.flatMap(s->Stream.of(s.split(\\s+))
.collect(collector.toCollection(()->new TreeSet(String.CASE不区分大小写\顺序));
}

TreeSet
将保留看到的第一个单词的大小写,并将对单词进行排序,因此使用
{“示例示例”,“示例”}
调用的结果是所需的结果
[示例]

根据问题中的示例代码,您希望在空白处拆分字符串,即使你从来没有在问题中说过

然后尝试使用
distinct()

要获得您想要的结果:

// Using loops
public static Set<String> distinctWords(String... input) {
    Set<String> distinct = new TreeSet<>(String.CASE_INSENSITIVE_ORDER);
    for (String s : input)
        for (String word : s.trim().split("\\s+"))
            distinct.add(word);
    return distinct;
}
//使用循环
公共静态集distinctWords(字符串…输入){
Set distinct=new TreeSet(String.CASE不区分大小写\u顺序);
for(字符串s:输入)
用于(字符串字:s.trim().split(\\s+))
添加(单词);
回归清晰;
}
//使用流
公共静态集distinctWords(字符串…输入){
返回流.of(输入)
.flatMap(s->Stream.of(s.split(\\s+))
.collect(collector.toCollection(()->new TreeSet(String.CASE不区分大小写\顺序));
}

TreeSet
将保持看到的第一个单词的大小写,并对单词进行排序,因此使用
{“Example-Example”,“Example”}
调用的结果就是所需的结果
[Example]

您是否询问如何忽略大小写差异?因为你选择的例子有问题。我不明白你是怎么定义的。如果它是“示例”,它还会是相同的吗?数组中有两个不同的元素。现在,如果数组是
{“Example”,“Example”,“Example”}
,那么忽略大小写时会有一个不同的值。“a”与“a”相同吗?逻辑是什么?我在问我如何在这里做等式转换?你是在问如何忽略案例差异?因为你选择的例子有问题。我不明白你是怎么定义的。如果它是“示例”,它还会是相同的吗?数组中有两个不同的元素。现在,如果数组是
{“Example”,“Example”,“Example”}
,那么忽略大小写时会有一个不同的值。“a”与“a”相同吗?我问的逻辑是什么?我该怎么做?