0

下面是字符串的示例。在下面的四个字符串示例中,您会发现userId一如既往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}

所以现在在我下面的方法中,我试图用 验证strid,我将把字符串和 id 传递给isStringValid method.

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

    System.out.println(str);

    return valid;
}

问题陈述:-

现在我正在尝试id valueuserId value上面的匹配JSON String。意思是 if id value is 101then 在上面的JSON String userId值也应该是 101。如果其中任何一个不匹配或字符串中没有 userId 值,则设置vaild 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 回答