java判断一个字符串(如 str1)是否在给定的一组字符串

在 Java 中,有几种简洁的方式可以判断一个字符串(如 str1)是否在给定的一组字符串(如 str2, str3, str4)中:

1️⃣ ​直接使用 || 逻辑运算符​(适用于少量固定字符串)

if (str1.equals(str2) || str1.equals(str3) || str1.equals(str4)) {
    // str1 存在于 str2/str3/str4 中
}

2️⃣ ​使用 Set 集合​(推荐,代码简洁且效率高)

Set set = new HashSet<>(Arrays.asList(str2, str3, str4));
if (set.contains(str1)) {
    // str1 存在于集合中
}

3️⃣ ​使用 Apache Commons Lang 工具类​(需第三方库)

import org.apache.commons.lang3.StringUtils;

if (StringUtils.equalsAny(str1, str2, str3, str4)) {
    // str1 存在于任意字符串中
}

4️⃣ ​使用 Stream API​(Java 8+)

boolean exists = Stream.of(str2, str3, str4).anyMatch(str1::equals);
if (exists) {
    // str1 存在于集合中
}

5️⃣ ​自建工具函数​(灵活复用)

public class StringUtils {
    public static boolean isIn(String target, String... options) {
        for (String option : options) {
            if (java.util.Objects.equals(target, option)) {
                return true;
            }
        }
        return false;
    }
}

// 使用示例
if (StringUtils.isIn(str1, str2, str3, str4)) {
    // str1 存在于其中
}

关键说明:

  1. 空值安全​:建议使用 Objects.equals(a, b) 代替 a.equals(b),可安全处理 null 值(避免 NPE)。
  2. 效率考量​:
    • 少量固定值:直接用 || 最快
    • 动态值/大量值:HashSet 的 O(1) 复杂度更优
  3. 依赖推荐​:
    • 若项目中已有 Apache Commons Lang,推荐 StringUtils.equalsAny()
    • 纯 JDK 方案:Set 或 Stream 最佳

️ Objects.equals() 处理 null 的示例:

import java.util.Objects;

String str1 = null;
String str2 = "hello";

// 安全比较
if (Objects.equals(str1, str2)) { 
    System.out.println("Equal with null safety!");
}

选择方法时需根据场景(字符串数量、代码复用性、项目依赖)灵活选用。

你可能感兴趣的:(java)