0

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

A:B:C:D:E:F:G:H:I:J:K:L:M

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

现在假设您有以下行:

A:B:C:D:E:F:G:H:::::

该行也是有效的,因为它包含 12 个分隔符。其中存在 8 个值,4 个值为空白。

现在以下行应该是无效的:

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

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

4

5 回答 5

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;
}
于 2012-06-28T04:51:08.690 回答
3

如果您想使用split,这确实不是一个坏方法(尽管它可能适用于这种特殊情况),您需要将 -1 作为第二个参数传递给它,split否则它会删除空字符串。

请参阅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");
        }
    }
}
于 2012-06-28T04:56:11.807 回答
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");
}
于 2012-06-28T04:52:46.380 回答
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");
 }

因为数组的值不是分隔符

于 2012-06-28T04:48:20.613 回答
0

简洁的 Java 8 解决方案:

private static boolean isValid(String content, char delimiter, int count) {
    return count == content.chars().filter(c -> c == delimiter).count();
}
于 2017-06-03T15:07:57.083 回答