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

Java 如何仅比较前三个字符并删除匹配元素?,java,string-comparison,Java,String Comparison,我需要将给定ArrayList元素中的前三个字符与给定文本进行比较,并删除匹配的天数 例如,如果给定的文本是“MON”,那么它应该与daysList的元素进行比较,并删除“MONDAY” 我试过的是 private String[] daysList = { "MONDAY", "TUESDAY", "WEDNESDAY", "THURSDAY", "FRIDAY", "SATURDAY", "SUNDAY" }; // It only works if using "MONDAY"

我需要将给定
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[]{});
private String[]daysList={“星期一”、“星期二”、“星期三”,
“星期四”、“星期五”、“星期六”、“星期日”};
//只有在使用“星期一”时才有效
private givenString=“MON”;
列表资产=新的ArrayList(Arrays.asList(daysList));
//这里不行
资产。移除(给定安装);
字符串[]newDayList=asSet.toArray(新字符串[]{});
使用和:

使用和:

解释 问题是您使用了
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();
    }
}
如果你有Java8,你可以使用
Collection#removeIf
(),一切都可以分解为

aSet.removeIf(element -> element.startsWith(givenString));
请注意,
ArrayList
不是
Set
,因为您将其称为aSet。
列表
不同于
集合
,集合没有顺序(至少是常规定义),不能包含重复项。

说明 问题是您使用了
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();
    }
}
如果你有Java8,你可以使用
Collection#removeIf
(),一切都可以分解为

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

请注意,
ArrayList
不是
Set
,因为您将其称为aSet。
列表
不同于
集合
,集合没有顺序(至少是常规定义),不能包含重复项。

字符串最多三个字符=s.substring(0,Math.min(s.length(),3))使用此选项获取
n
char。您可以使用
equalsIgnoreCase()
名称
资产的重要性是什么?
字符串最多三个字符=s.substring(0,Math.min(s.length(),3))使用此选项获取
n
char。您可以使用
equalsIgnoreCase()
资产的名称
的意义是什么?