突破之后重新点燃条件陈述?

时间:2013-12-13 21:01:33

标签: java logic

我有一个基本方法,它根据用户的输入返回一个字符串:

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()语句,它会永远运行并最终导致程序崩溃。

2 个答案:

答案 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进行了一些调整(参见下面的评论/其他答案)。