用Java检查数组中的字符串

时间:2015-01-06 00:53:09

标签: java arrays string

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

例如(而不是\ 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] = "";
        }
    }

这使得数组中的所有元素都是&#34;&#34;。我想知道为什么会这样,以及我可以改变什么来实现它。

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

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] = "";
    }
}

2 个答案:

答案 0 :(得分:1)

它正在发生,因为对于每个字符串,您至少匹配or语句中的一个条件。

条件:

  1. 数组不包含标签(!array[i].contains("\t")
  2. 数组不包含&#34; HIGH&#34; (!array[i].contains("HIGH")
  3. 数组不包含&#34;#&#34; (!array[i].contains("#")
  4. 字符串,以及它们匹配的内容:

    1. &#34; ##其他数据1&#34 ;; (匹配#1&amp;#2,没有标签,没有&#34; HIGH&#34;)
    2. &#34; ##其他数据2&#34 ;; (匹配#1&amp;#2,没有标签,没有&#34; HIGH&#34;)
    3. ???
    4. &#34;#字段1 \ tField2 \ tField3&#34 ;; (匹配#2,没有&#34; HIGH&#34;)
    5. &#34; LOW \ TABC \ TDEF&#34; (匹配#2,没有&#34; HIGH&#34;)
    6. &#34; HIGH \ tXYZ \ t12(匹配#3,不#34;#&#34;)
    7. 在不了解您的要求的情况下,我怀疑您并不意味着要将这些要求放在一起,或者您想要将(!)放在您想要匹配的地方。

答案 1 :(得分:0)

如果你想让所有行都有一个以#或HIGH开头的标签,那么

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