String.replace()方法不在java中打印完整字符串

时间:2014-10-18 20:35:20

标签: java eclipse string replace

我正在尝试为我的计算机科学课做一些功课,而我似乎无法想象这一部分。问题是:

  

编写一个程序,读取一行文字,然后显示该行,但第一次出现 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"));
    }
}

我希望输入“我讨厌你”的字符串输入“我爱你”,但它输出的只是“我”。当它检测到我试图替换的单词的第一次出现时,它将删除字符串的其余部分,除非它是字符串的第一个单词。例如,如果我只输入“讨厌”,它会将其改为“爱”。我查看了许多网站和文档,我相信我正在遵循正确的步骤。如果有人能解释我在这里做错了什么,以便它显示完整的字符串和替换的单词,那就太棒了。

谢谢!

4 个答案:

答案 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());
    }
}

利用扫描仪一次返回一个字。如果单词后跟一个标点符号,则匹配将失败。无论如何,这是我在阅读问题时突然出现的答案。