如何只比较前三个字符并删除匹配元素?
How to compare only first three characters and remove matching elements?
我只需要 比较 给定 ArrayList
元素中的 前三个字符 与给定文本,然后删除匹配的天数。
例如,如果给定的文本是"MON"
,那么它应该与daysList
的元素进行比较并删除"MONDAY"
。
我试过的是
private String[] daysList = { "MONDAY", "TUESDAY", "WEDNESDAY",
"THURSDAY", "FRIDAY", "SATURDAY", "SUNDAY" };
// It only works if using "MONDAY" instead
private givenString = "MON";
List<String> asSet = new ArrayList<String>(Arrays.asList(daysList));
// It fails here
asSet.remove(givenString);
String[] newDayList = asSet.toArray(new String[]{});
使用Set.removeIf()
and String.startsWith()
:
asSet.removeIf(s -> s.startsWith(givenString));
说明
问题是你使用了asSet.remove(givenString);
。此方法准确地搜索该元素。如果你给出 "MON"
那么只有内容为 "MON"
的元素将被删除。
解决方案
手动方法就像
// Iterate all elements
Iterator<String> elements = aSet.iterator();
while (elements.hasNext()) {
String element = elements.next();
// Compare first three characters
boolean doMatch = true;
for (int i = 0; i < 3; i++) {
char first = givenString.charAt(i);
char second = element.charAt(i);
if (first != second) {
doMatch = false;
break;
}
}
// Remove if matches
if (doMatch) {
// Remove element at current position
elements.remove();
}
}
然而,没有必要重新发明轮子。您可以只使用 String#startsWith
(documentation) 方法:
Iterator<String> elements = aSet.iterator();
while (elements.hasNext()) {
String element = elements.next();
if (element.startsWith(givenString)) {
elements.remove();
}
}
如果你有 Java 8,你可以使用 Collection#removeIf
(documentation) 一切都分解为
aSet.removeIf(element -> element.startsWith(givenString));
请注意 ArrayList
是 而不是 Set
,因为您称它为 aSet。 List
与 Set
不同,集合没有顺序(至少是常规定义)并且不能包含重复项。
我只需要 比较 给定 ArrayList
元素中的 前三个字符 与给定文本,然后删除匹配的天数。
例如,如果给定的文本是"MON"
,那么它应该与daysList
的元素进行比较并删除"MONDAY"
。
我试过的是
private String[] daysList = { "MONDAY", "TUESDAY", "WEDNESDAY",
"THURSDAY", "FRIDAY", "SATURDAY", "SUNDAY" };
// It only works if using "MONDAY" instead
private givenString = "MON";
List<String> asSet = new ArrayList<String>(Arrays.asList(daysList));
// It fails here
asSet.remove(givenString);
String[] newDayList = asSet.toArray(new String[]{});
使用Set.removeIf()
and String.startsWith()
:
asSet.removeIf(s -> s.startsWith(givenString));
说明
问题是你使用了asSet.remove(givenString);
。此方法准确地搜索该元素。如果你给出 "MON"
那么只有内容为 "MON"
的元素将被删除。
解决方案
手动方法就像
// Iterate all elements
Iterator<String> elements = aSet.iterator();
while (elements.hasNext()) {
String element = elements.next();
// Compare first three characters
boolean doMatch = true;
for (int i = 0; i < 3; i++) {
char first = givenString.charAt(i);
char second = element.charAt(i);
if (first != second) {
doMatch = false;
break;
}
}
// Remove if matches
if (doMatch) {
// Remove element at current position
elements.remove();
}
}
然而,没有必要重新发明轮子。您可以只使用 String#startsWith
(documentation) 方法:
Iterator<String> elements = aSet.iterator();
while (elements.hasNext()) {
String element = elements.next();
if (element.startsWith(givenString)) {
elements.remove();
}
}
如果你有 Java 8,你可以使用 Collection#removeIf
(documentation) 一切都分解为
aSet.removeIf(element -> element.startsWith(givenString));
请注意 ArrayList
是 而不是 Set
,因为您称它为 aSet。 List
与 Set
不同,集合没有顺序(至少是常规定义)并且不能包含重复项。