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

时间:2012-06-28 04:44:17

标签: java string

我有一个如下字符串:

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

我将输出视为无效,因为它可能是有效的。

5 个答案:

答案 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,否则它删除空字符串。

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

答案 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);