0

以下は文字列のサンプル例です。以下の 4 つの文字列の例ではuserId、always として見つかりますkey

{siteRebateSenstvty=0;1,1;2, siteRedemptChg=16;30,77;40, userId=101}
{sgmntId=1, userId=101}
{predictedCatRev=0;101;1,1;201;2, predictedOvrallRev=77;2,0;1,16;3, sitePrftblty=77;2,0;1671679, topByrGms=12345.67, usrCurncy=1, vbsTopByrGmb=167167.67, userId=101}
{zipCode=CA11 9QL, userId=101}

したがって、以下のメソッドでは、 でstr値を検証しようとしています。id文字列と ID を に渡しますisStringValid method

private boolean isStringValid(String str, String id) {
    boolean valid = false;

    System.out.println(str);

    return valid;
}

問題文:-

今、私は上記のと一致id valueさせようとしています。上記の値も 101 にする必要がある場合を意味します。それらのいずれかが一致しない場合、または文字列に userId 値が存在しない場合は、.userId valueJSON Stringid value is 101JSON String userIdvaild boolean to false

この問題を解決する最善の方法は何ですか?

このままじゃ無理だ-

if(str.contains(id))101 が任意のキーの数字として存在する可能性があるためです。

4

1 に答える 1

1

; ,id (最初の例では 101) の後に常にorが続くと仮定すると、次の}ように使用できます。

String str = "{siteRebateSenstvty=0;1,1;2, siteRedemptChg=16;30,77;40, userId=101}";
String id = "101";
boolean valid = str.matches(".*userId=" + id + "[,;}]+.*");
System.out.println("valid = " + valid);

この[,;}]+部分により、次の文字が ID の一部ではないことが保証されます (たとえば、101 が予期される場合に 1015a は有効な userId とは見なされません)。

代わりに、おそらくより堅牢に、単語境界を使用できます。

boolean valid = str.matches(".*userId=" + id + "\\b+.*");
于 2013-03-19T22:49:21.333 に答える