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、それが実際には悪いアプローチではない場合(この特定の状況ではそうかもしれませんが)、2番目の引数として-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

そのはず

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

ここで正規表現を使用する理由はありません。入力の有効性をチェックするための唯一の基準が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

簡潔なJava8ソリューション:

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 に答える