我有两个包含一些字符串的数组,如下所示:
数组#1
abcd
efgh
servicegroup_1
ijkl
数组#2
servicegroup_3
servicegroup_1
我想打印一个像 "VERIFY: OK"
这样的字符串(在控制台上)如果数组 #1 至少包含数组 #2 的字符串之一。否则,字符串 "VERIFY: KO"
必须打印。
我实现了一些如下代码:
for (int i = 0; i < scopeFile.length; i++) {
for (String element : scopeJWT) {
if (scopeFile[i].contains(element)) {
ctx.setSendZuulResponse(true);
System.out.println(now + " --- " + "[Check Signature: OK]" + " [Verify Scope: OK]" + " [Verify expTime: OK]");
} else {
ctx.setSendZuulResponse(false);
ctx.setResponseStatusCode(HttpStatus.UNAUTHORIZED.value());
System.err.println(now + " --- " + "[VERIFY SCOPE: KO]");
}
}
}
但是,它返回 VERIFY SCOPE: OK
和VERIFY SCOPE: KO
,即使考虑我报告的数组,我也会只打印 VERIFY SCOPE: OK
(因为数组 #1 包含 servicegroup_1
)
有什么想法可以修复我的代码吗?谢谢您
最佳答案
在 Array1 中找到字符串后,您忘记中断循环。
尝试在此行之后添加 break;
:
System.out.println(now + " --- " + "[Check Signature: OK]" + " [Verify Scope: OK]" + " [Verify expTime: OK]");
并检查循环外的非正常情况。
像这样:
boolean isOk = false;
for (int i = 0; i < scopeFile.length; i++) {
for (String element : scopeJWT) {
if (scopeFile[i].contains(element)) {
ctx.setSendZuulResponse(true);
System.out.println(now + " --- " + "[Check Signature: OK]" + " [Verify Scope: OK]" + " [Verify expTime: OK]");
isOk = true;
break;
}
}
}
if (!isOk) {
ctx.setSendZuulResponse(false);
ctx.setResponseStatusCode(HttpStatus.UNAUTHORIZED.value());
System.err.println(now + " --- " + "[VERIFY SCOPE: KO]");
}
关于java - 如何在两个数组中查找字符串之间的匹配项 - java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52162016/