如何仅比较前三个字符并删除匹配元素?

时间:2018-01-16 04:27:19

标签: java string-comparison

我需要比较仅使用给定文字的给定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[]{});

2 个答案:

答案 0 :(得分:2)

使用Set.removeIf()String.startsWith()

asSet.removeIf(s -> s.startsWith(givenString));

答案 1 :(得分:0)

说明

问题是你使用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#startsWithdocumentation)方法:

Iterator<String> elements = aSet.iterator();
while (elements.hasNext()) {
    String element = elements.next();

    if (element.startsWith(givenString)) {
        elements.remove();
    }
}

如果你有Java 8,你可以使用Collection#removeIfdocumentation),一切都分解为

aSet.removeIf(element -> element.startsWith(givenString));

请注意ArrayList <{1}},因为您将其命名为 aSet SetList不同,集合没有订单(至少是常规定义),不能包含重复项。