我有一个如下字符串:
A:B:C:d:E:F:G:H:我:J-:K:L:M
这意味着分隔符(:)计数为12。此行有效。
现在假设你有以下一行:
答:B:C:D:E:F:G:H :::::
此行也有效,因为它包含12个分隔符。其中存在8个值,4个值为空。
现在以下行应无效:
答:B:C:D:E:F: - 无效 - 因为它只包含6个值但预期为12个。
怎么做...?我尝试了以下代码,但未获得所需的输出:
String strLine = "A:B:C:D:E:F:G:H:::::" ;
int delimiterCount = 12 ;
String[] ValuesArray = strLine.split(":");
if(ValuesArray.length != delimiterCounter){
System.out.println(Invalid);
}else {
System.out.println("ValidLine");
}
我将输出视为无效,因为它可能是有效的。
答案 0 :(得分:4)
使用以下方法计算特定String
public static int countOccurance(String inputString, String key) {
int index = 0;
int fromIndex = 0;
int result = 0;
if (inputString == null || key == null) {
return 0;
}
while ((index = inputString.indexOf(key, fromIndex)) != -1) {
result++;
fromIndex = index + key.length();
}
return result;
}
答案 1 :(得分:2)
如果你想使用split
,它确实不是一个糟糕的方法(尽管可能是针对这种特殊情况),你需要将-1作为第二个参数传递给split
,否则它删除空字符串。
很高兴了解split
。有些语言需要-1而有些则不需要。
代码
class Main {
public static void main(String[] args) {
String line = "A:B:C:D:E:F:G:H:::::" ;
int delimiterCount = 12 ;
String[] values = line.split(":", -1);
if (values.length != delimiterCount + 1) {
System.out.println("Invalid Line");
} else {
System.out.println("Valid Line");
}
}
}
答案 2 :(得分:0)
应该是
String strLine = "A:B:C:D:E:F:G:H: : : : : " ;
int delimiterCount = 12 ;
String[] ValuesArray = strLine.split(":");
if((ValuesArray.length - 1) != delimiterCounter){
System.out.println(Invalid);
}else {
System.out.println("ValidLine");
}
因为数组的值不是delimeter
答案 3 :(得分:0)
没有理由在这里使用正则表达式。如果检查输入有效性的唯一标准是12个分度:
,那么只需计算它们。
String strLine = "A:B:C:D:E:F:G:H:::::";
int EXPECTED_DELIMETERS = 12;
int delimiterCount = 0;
for (int idx = 0; idx < strLine.length(); idx++) {
if (strLine.charAt(idx) == ':') {
delimiterCount++;
}
}
if (EXPECTED_DELIMETERS == delimiterCount) {
System.out.println("ValidLine");
} else {
System.out.println("Invalid");
}
答案 4 :(得分:0)
简明Java 8解决方案:
MapScene.CreateFromCamera(nativeMap.ActualCamera);