只要某个条件适用,我想执行一个循环。最后,我想返回最后在循环中找到的值。
非现实世界的例子:
teststring = " abcde";
String letter = null;
do {
letter = reader.read(); //reads the teststring char by char
} while (letter.equals(" "));
return letter; //return "a"
这可以从编码的角度进行优化,例如将其从do-while循环转换为while循环吗?
答案 0 :(得分:1)
如果您使用Java 1.7或1.8,则可以执行以下操作:
while((letter=reader.read()).equals(" ")){
}
return letter;
答案 1 :(得分:1)
如果您正在从Reader读取它会返回一个int char
或-1,如果在输入结束时。
int ch;
while((ch = reader.read()) == ' ');
return ch;
注意:“”是一个字符串,''是一个字符。
答案 2 :(得分:1)
不确定什么更有效但你可以做类似的事情:
`return teststring.trim().charAt(0);
答案 3 :(得分:1)
do {
...
} while (<condition>);
我将解释你关于do / while vs的问题。
do只是一个标签。它对效率没有影响。底部的while实际上是if(条件)goto行#,其中line#是do。 “do”只是告诉编译器底部goto语句中您想要的数字的一种方式。
将while语句置于顶部实际上效率较低,因为这意味着必须在第一次迭代时评估条件。也许你的读者确实需要在第一次迭代时检查,然后它应该是一个while语句,但这需要更多的工作,你知道吗?
第二个甚至将它转换为只有一个while语句,仍然在底部放置一个无条件goto,顶部有一个条件goto,所以即使看起来代码较少,也可能更多。
答案 4 :(得分:0)
我认为使用String.toCharArray()
和For Each
loop之类的
String teststring = " abcde";
for (char ch : teststring.toCharArray()) {
if (ch != ' ') return ch; // <-- 'a'
}
throw new ParseException("Whitespace only");
但是,您可以使用StringReader
并使用char
(原始版),所以我认为您已经要求
String teststring = " abcde";
StringReader reader = new StringReader(teststring);
try {
int letter;
do {
letter = reader.read();
} while (letter == ' ');
return ((char) letter);
} catch (IOException e) {
e.printStackTrace();
}
throw new ParseException("Whitespace only");
或如果找不到该字符,则返回默认值。