检查 Java 中数组中的字符串

Checking strings in an array in Java

我想知道我做错了什么。我有一个 table 加载到一维数组中,每个元素都是一行,值是制表符分隔的。

例如(不是\t,实际上是空白制表符):

array[0] = "##Misc data 1";
array[1] = "##Misc data 2";
array[3] = "#Field1\tField2\tField3";
array[4] = "LOW\tABC\tDEF"
array[5] = "HIGH\tXYZ\t123"

我希望数组是

array[0] = "";
array[1] = "";
array[3] = "#Field1\tField2\tField3";
array[4] = ""
array[5] = "HIGH\tXYZ\t123"

我目前的密码是

    for (int i = 0; i < array.length; i++) {
        if (!array[i].contains("\t") || !array[i].contains("HIGH") || !array[i].contains("#")) {
            array[i] = "";
        }
    }

这使得数组中的所有元素都是“”。我想知道为什么会这样,我可以改变什么来做到这一点。

编辑:感谢您的所有意见和建议,我已经在您的指导下解决了。

for (int i = 0; i < array.length; i++) {
    if (array[i].contains("\t")) {
        if (array[i].contains("HIGH") || array[i].contains("#")) {
            // do nothing
        } else {
            array[i] = "";
        }
    } else {
    array[i] = "";
    }
}

发生这种情况是因为对于每个字符串,您至少匹配了 or 语句中的一个条件。

条件:

  1. 数组不包含制表符 (!array[i].contains("\t")) OR
  2. 数组不包含 "HIGH" (!array[i].contains("HIGH")) OR
  3. 数组不包含“#”(!array[i].contains("#"))

字符串及其匹配项:

  1. "##杂项数据1"; (匹配 #1 和 #2,没有制表符,没有 "HIGH")
  2. "##杂项数据2"; (匹配 #1 和 #2,没有制表符,没有 "HIGH")
  3. ???
  4. "#Field1\tField2\tField3"; (第 2 场比赛,没有 "HIGH")
  5. "LOW\tABC\tDEF"(匹配 #2,没有 "HIGH")
  6. "HIGH\tXYZ\t12 (Matches #3, no "#")

在不了解您的要求的情况下,我怀疑您不是有意将它们放在一起,或者您在需要匹配的地方放置了一个非 (!)。

如果您希望保留所有以 # 或 HIGH 开头的制表符的行,则

if (!array[i].contains("\t") ||
       (!array[i].startsWith("HIGH") && !array[i].startsWith("#")) {
  array[i] = "";
}