2015-01-06 32 views
-1

我想知道我在做什么错误。我有一个表加载到1d数组,每个元素是一个行,并且值是制表符分隔。检查Java中的数组中的字符串

例如(而不是\吨,它实际上是空白标签):

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

可能是我,但你想要的对我来说有点不清楚。你能澄清更好的PLZ吗? –

+0

在你的例子中,为什么“LOW \ t”被清除,但“HIGH \ t”不是?一个术语是否优先?你测试所有这些,然后总是做同样的事情。 – markspace

回答

1

它的发生,因为每个字符串,你匹配你的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. “#字段1 \ tField2 \ tField3”; (匹配#2,没有 “HIGH”)
  5. “LOW \ TABC \ TDEF”(匹配#2,没有 “HIGH”)
  6. “HIGH \ tXYZ \ T12(匹配#3,没有 “#”)

不知道更多关于你的要求,我怀疑你不是说要OR这些结合在一起,或者你把在那里的某个地方你想匹配一个没有(!

+0

哦,我明白了。我怎么能让它像我想要的数组(第二个数组)? – Raymosrunerx

0

如果你想保留的所有。带有以#或HIGH开头的制表符的行,然后

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