我想知道我做错了什么。我有一个表加载到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] = "";
}
}
答案 0 :(得分:1)
它正在发生,因为对于每个字符串,您至少匹配or
语句中的一个条件。
条件:
!array[i].contains("\t")
)或 !array[i].contains("HIGH")
)或 !array[i].contains("#")
)字符串,以及它们匹配的内容:
在不了解您的要求的情况下,我怀疑您并不意味着要将这些要求放在一起,或者您想要将(!
)放在您想要匹配的地方。
答案 1 :(得分:0)
如果你想让所有行都有一个以#或HIGH开头的标签,那么
if (!array[i].contains("\t") ||
(!array[i].startsWith("HIGH") && !array[i].startsWith("#")) {
array[i] = "";
}