我有一个基本方法,它根据用户的输入返回一个字符串:
public String getString() {
String message = inputGenerator.getMessage(); // Returns user inputted string
String messageStart = message.substring(0, 3); // Get start of message
String concat = ""; // Variable to concatenate messages
if(messageStart.equals("Hi")) {
concat += message; // Append input to concat string.
inputGenerator.getMessage(); // Call for another user prompt
} else {
concat += message; // Append input to concat string.
}
return concat; // Return concatenated string.
}
我想做什么:
正如您可以希望的那样,我想要做的是如果消息的开头包含单词hi
,则提示用户输入更多消息,直到它没有,并返回该连接的字符串,例如:
>> Enter a string ("hiexample")
>> Enter a string ("hianotherexample")
>> Enter a string ("nothi")
>> returns "hiexamplehianotherexamplenothi"
问题
问题是if语句只能工作一次,因为inputGenerator.getMessage();
在被调用后明显跳出条件。
如果我尝试使用while()
语句,它会永远运行并最终导致程序崩溃。
答案 0 :(得分:3)
这似乎更短更优雅:
public String getString() {
StringBuilder msg = new StringBuilder();
String read;
do {
read = inputGenerator.getMessage();
msg.append(read);
} while (read.toLowerCase().startsWith("hi"));
return msg.toString();
}
我使用StringBuilder,因为它比像你这样的字符串连接更有效。 让我解释一下:
concat += message;
被编译器膨胀到
concat = new StringBuilder(concat).append(message).toString();
现在猜猜哪个更有效率。 :)
答案 1 :(得分:1)
这是你在想什么?
public String getString()
{
String result = "";
while (true)
{
String message = inputGenerator.getMessage();
result += message;
if (!message.startsWith("hi"))
{
break;
}
}
return result;
}
我认为您希望2
作为substring
的第二个参数,因为您的延续字符串是"hi"
,对吗?
编辑:感谢Floegipoky,clcto和StackOverflowException进行了一些调整(参见下面的评论/其他答案)。