检查 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
语句中的一个条件。
条件:
- 数组不包含制表符 (
!array[i].contains("\t")
) OR
- 数组不包含 "HIGH" (
!array[i].contains("HIGH")
) OR
- 数组不包含“#”(
!array[i].contains("#")
)
字符串及其匹配项:
- "##杂项数据1"; (匹配 #1 和 #2,没有制表符,没有 "HIGH")
- "##杂项数据2"; (匹配 #1 和 #2,没有制表符,没有 "HIGH")
- ???
- "#Field1\tField2\tField3"; (第 2 场比赛,没有 "HIGH")
- "LOW\tABC\tDEF"(匹配 #2,没有 "HIGH")
- "HIGH\tXYZ\t12 (Matches #3, no "#")
在不了解您的要求的情况下,我怀疑您不是有意将它们放在一起,或者您在需要匹配的地方放置了一个非 (!
)。
如果您希望保留所有以 # 或 HIGH 开头的制表符的行,则
if (!array[i].contains("\t") ||
(!array[i].startsWith("HIGH") && !array[i].startsWith("#")) {
array[i] = "";
}
我想知道我做错了什么。我有一个 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
语句中的一个条件。
条件:
- 数组不包含制表符 (
!array[i].contains("\t")
) OR - 数组不包含 "HIGH" (
!array[i].contains("HIGH")
) OR - 数组不包含“#”(
!array[i].contains("#")
)
字符串及其匹配项:
- "##杂项数据1"; (匹配 #1 和 #2,没有制表符,没有 "HIGH")
- "##杂项数据2"; (匹配 #1 和 #2,没有制表符,没有 "HIGH")
- ???
- "#Field1\tField2\tField3"; (第 2 场比赛,没有 "HIGH")
- "LOW\tABC\tDEF"(匹配 #2,没有 "HIGH")
- "HIGH\tXYZ\t12 (Matches #3, no "#")
在不了解您的要求的情况下,我怀疑您不是有意将它们放在一起,或者您在需要匹配的地方放置了一个非 (!
)。
如果您希望保留所有以 # 或 HIGH 开头的制表符的行,则
if (!array[i].contains("\t") ||
(!array[i].startsWith("HIGH") && !array[i].startsWith("#")) {
array[i] = "";
}