while (i < a.size() && value2.substring(0, prefix.length()).compareTo(prefix) == 0) {
value2 = a.get(i);
if (value2.endsWith(suffix)) {
counter++;
setter = true;
}
i++;
}
我只是想知道是否有办法避免在我的代码中使用两次get()方法。我现在的问题是我需要在之前分配值2,以便我的while循环工作,但我还需要在while循环中更新它。
答案 0 :(得分:3)
也许这就是你所需要的:
for (String value : a) {
if (!value.startWith(prefix)) break;
if (value.endsWith(suffix)) {
counter++;
setter = true;
}
}
如果a不可迭代:
while(i < a.size()){
String value = a.get(i);
if (!value.startsWith(prefix))
break;
if(value.endsWith(suffix)){
counter++;
setter = true;
}
i++;
}
答案 1 :(得分:1)
while(i <a.size()){
value2 = a.get(i);
if(value2.substring(0,prefix.length()).compareTo(prefix)!=0){
break;
}
if(value2.endsWith(suffix)){
counter++;
setter = true;
}
i++;
}
答案 2 :(得分:0)
这类似于关于not being able to assign in conditions的Python问题;我们可以使用while(true) if () break;
惯用语 - 实际上,我们无法执行while (true)
,因为我们会在i == a.size()
上崩溃,因此我们会将代码拆分为while
和if
:
while (i < a.size())
{
String value2 = a.get(i);
if (value2.substring(0, prefix.length()).compareTo(prefix)==0)
{
if(value2.endsWith(suffix)){
counter++;
setter = true;
}
}
else
{
break;
}
i++;
}
(哦,请尝试使用常规缩进级别格式化代码;它使得事情变得更容易,不仅仅是我们,还有你。)
继续下面的评论,人们也可以做得更短,但在我看来更难以阅读:
String value2;
while (i < a.size() && (value2 = a.get(i)).substring(0, prefix.length()).compareTo(prefix)==0)
{
if(value2.endsWith(suffix))
{
counter++;
setter = true;
}
i++;
}
在这种情况下,如果在第二个表达式的中间进行赋值,我认为读者很容易忽略。
答案 3 :(得分:0)
stream
:
counter = a.stream()
.filter(s -> s.startsWith(prefix))
.filter(s -> s.endsWith(suffix))
.count();
setter = counter > 0;