我正在尝试为我的计算机科学课做一些功课,而我似乎无法想象这一部分。问题是:
编写一个程序,读取一行文字,然后显示该行,但第一次出现 hate 更改为 love 。
这听起来像是一个基本问题,所以我继续写下来:
import java.util.Scanner;
public class question {
public static void main(String[] args)
{
Scanner keyboard = new Scanner(System.in);
System.out.println("Enter a line of text:");
String text = keyboard.next();
System.out.println("I have rephrased that line to read:");
System.out.println(text.replaceFirst("hate", "love"));
}
}
我希望输入“我讨厌你”的字符串输入“我爱你”,但它输出的只是“我”。当它检测到我试图替换的单词的第一次出现时,它将删除字符串的其余部分,除非它是字符串的第一个单词。例如,如果我只输入“讨厌”,它会将其改为“爱”。我查看了许多网站和文档,我相信我正在遵循正确的步骤。如果有人能解释我在这里做错了什么,以便它显示完整的字符串和替换的单词,那就太棒了。
谢谢!
答案 0 :(得分:2)
你的错误发生在keyboard.next()
电话上。这将读取第一个(空格分隔的)单词。您想要使用keyboard.nextLine()
,因为它会读取整行(在这种情况下,您的输入就是这样)。
修改后,您的代码如下所示:
import java.util.Scanner;
public class question {
public static void main(String[] args)
{
Scanner keyboard = new Scanner(System.in);
System.out.println("Enter a line of text:");
String text = keyboard.nextLine();
System.out.println("I have rephrased that line to read:");
System.out.println(text.replaceFirst("hate", "love"));
}
}
答案 1 :(得分:1)
尝试获取这样的整行,而不仅仅是第一个令牌:
String text = keyboard.nextLine();
答案 2 :(得分:1)
keyboard.next()
仅读取下一个标记。
使用keyboard.nextLine()
读取整行。
在您当前的代码中,如果您在text
之前打印replace
的内容,则会看到只有I
被视为输入。
答案 3 :(得分:0)
作为替代答案,构建一个while循环并查找有问题的单词:
import java.util.Scanner;
public class question {
public static void main(String[] args)
{
// Start with the word we want to replace
String findStr = "hate";
// and the word we will replace it with
String replaceStr = "love";
// Need a place to put the response
StringBuilder response = new StringBuilder();
Scanner keyboard = new Scanner(System.in);
System.out.println("Enter a line of text:");
System.out.println("<Remember to end the stream with Ctrl-Z>");
String text = null;
while(keyboard.hasNext())
{
// Make sure we have a space between characters
if(text != null)
{
response.append(' ');
}
text = keyboard.next();
if(findStr.compareToIgnoreCase(text)==0)
{
// Found the word so replace it
response.append(replaceStr);
}
else
{
// Otherwise just return what was entered.
response.append(text);
}
}
System.out.println("I have rephrased that line to read:");
System.out.println(response.toString());
}
}
利用扫描仪一次返回一个字。如果单词后跟一个标点符号,则匹配将失败。无论如何,这是我在阅读问题时突然出现的答案。