我有一个像这样的属性文件:
key1=value1
key2=value2
key3=value3
此属性文件使用枚举和 while 循环迭代来读取下一个元素。
与此并行的是,我在 for 循环中有一个字符串变量,其值每次迭代都会发生变化!
consider for first iteration,
string=key1
2nd iteration,
string=key2
3rd iteration,
string=key4
4th iteration,
string=key3
5th iteration,
string=key5.
由于属性文件中不存在key4
和key5
,我想显示“key4”和“key5”
问题是我在使用枚举变量到达下一个元素时尝试使用 if(!string.equals(key))
,但我遇到了重复的结果以及使用哈希设置为消除重复让我对正在尝试的逻辑方法感到困惑。
这里是一段代码
for (int i=0; i<bc.length; i++)
{
Policy p[] = bc[i].getPolicies().getValue();
String testcases = bc[i].getSearchPath().getValue();
Enumeration<?> e1 = prop.propertyNames();
while (e1.hasMoreElements())
{
key = (String) e1.nextElement();
if(testcases.equals(key))
{
System.out.println("match");
} else
{
System.out.println("unmatched");
set.add(testcases);//to eliminate duplicates
}
}
}
最佳答案
这里:
while (e1.hasMoreElements()) {
key = (String) e1.nextElement();
if (testcases.equals(key)) {
... IN ...
} else {
... OUT ...
这个逻辑根本就是有缺陷的。基本上,您拥有从中检索测试用例的数组,例如:
bc[i].getSearchPath().getValue();
然后您就有了属性,其中包含属性列表。您的代码执行以下操作:
- 迭代所有“测试用例”
- 迭代所有给定属性
每次属性键与测试用例匹配时,您都说“IN”。对于所有其他情况,则为“OUT”。这会给你太多的“OUT”输出错误。
改用这个:
for (int i=0; i<bc.length; i++) {
String matchingKey = null;
while (e1.hasMoreElements()) {
key = (String) e1.nextElement();
if (testcases.equals(key)) {
matchingKey = key;
break;
}
}
if (matchingKey != null) {
... IN ...
} else {
... OUT ...
感谢评论:如果不需要其他处理,您可以保存一些循环迭代并从该内部循环中中断。
除此之外,如果您确实有许多测试用例需要检查 - 例如,一次处理属性名称并将它们推送到 HashSet 中可能是值得的。稍后只需使用 set.contains()
即可。
关于java - 尝试查找属性文件中缺少 key 的 apt java 代码逻辑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44883331/