String函数如何计算字符串行中的分隔符

我有一个如下所示的字符串:

A:B:C:d:E:F:G:H:我:J-:K:L:M

这意味着分隔符(:)计数为12。 这条线是有效的。

现在假设您有以下行:

A: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"); } 

我得到的输出为无效,因为它应该是有效的。

如果你想使用split ,并且它确实不是一个糟糕的方法(虽然它可能适用于这种特殊情况),你需要传递-1作为第二个参数,否则它会删除空字符串。

请参见http://ideone.com/gaUw5 。

很高兴知道关于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"); } } } 

使用以下方法计算特定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; } 

它应该是

 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"); } 

因为数组将具有值而不是分隔符

没理由在这里使用正则表达式。 如果检查输入有效性的唯一标准是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"); } 

简洁的Java 8解决方案:

 private static boolean isValid(String content, char delimiter, int count) { return count == content.chars().filter(c -> c == delimiter).count(); }