如何在忽略案例时检查arraylist中是否有相同的字符串? 提前抱歉,我是StackOverflow的新手。
新编辑: 这是我到目前为止在学校使用NetBeans所做的。谢谢你们! 所以老师想要的是以下内容: / * 询问姓名,输入的姓名必须在没有双重符号的情况下排序。 表示如果输入两次相同的名称,则不会显示第二个名称 并添加到arrayList中。第一封信必须是上装的 休息更低。 附加:即使使用不同的输入拼写。 示例:Mike - > miKE - >梅根 - >露西 - >停 sout:露西,梅根,迈克。 Addition_2:仅输入多个输入的名称。 * /
FreeT
答案 0 :(得分:4)
您有多种选择:
<强> 1 强>
如果最后无关紧要,您可以随时在lowerCaser
listednames.add(entry.toLowercase());
同样entry = entry.trim().toLowercase()
这样你的包含检查就可以了
<强> 2 强> 使用方法手动检查:
for (String name : listednames) {
if (name.equalIgnoreCase(entry)) {
continue;
}
}
或使用java 8功能:
if( listednames.stream().anyMatch(entry::equalsIgnoreCase) ){
continue;
}
答案 1 :(得分:2)
您必须手动循环浏览ArrayList
并逐个比较条目。
for (String s : listednames) {
if (s.equalIgnoreCase(entry)) {
continue;
}
}
答案 2 :(得分:0)
如果你想在线性时间内做到这一点非常简单。你应该在check和add方法中使用toUpperCase()(或toLowerCase()),你可以尝试使用这个修改过的代码:
ArrayList listednames = new ArrayList<>();
while (true) {
String entry = JOptionPane.showInputDialog("name:");
if (entry == null) {
break;
}
entry = entry.trim();
if (entry.equalsIgnoreCase("stop")) {
break;
}
if (entry.isEmpty()) {
continue;
}
if (listednames.contains(entry.toUpperCase())) {
continue;
}
listednames.add(entry.toUpperCase());
Collections.sort(listednames);
String namen = listednames.toString();
namen = namen.substring(1, namen.length()-1);
System.out.println(namen);
}
答案 3 :(得分:0)
如果您喜欢简短:
&#xA;&#xA; if(listednames.stream()。anyMatch(entry :: equalsIgnoreCase)){&#xA; 代码>
&#xA;&#xA; 尽管for循环通常更喜欢使用流来实现可读性,性能和调试,但我想我会把它放在这里。
& #xA;&#xA;因为我确实喜欢更少的行(你可能没有意识到这一点):
&#xA;&#xA; String entry = JOptionPane .showInputDialog(“name:”);&#xA; entry = Optional.ofNullable(entry).orElse(“STOP”)。trim();&#xA; if(“STOP”.equalsIgnoreCase(entry)){& #xA;打破;&#XA;}&#XA; 代码>
&#XA;