带空格的字符串

时间:2016-01-28 16:30:27

标签: java java.util.scanner

我试图进入Java,我决定直接进入用户输入。这是我的代码:

import java.util.Scanner;

public class HelloWorld{

 public static void main(String []args){
    System.out.println("Enter a phrase to mutate: \n"); 

    Scanner userinput = new Scanner(System.in);
    String phrase = userinput.next();
    System.out.println(phrase);

    String phrasemutation1 = phrase.toUpperCase();
    System.out.println(phrasemutation1);

    String phrasemutation2 = phrasemutation1.replace('I','X');
    System.out.println(phrasemutation2);

    //String phrasemutation3 = phrasemutation2.substring(17, 23);
    //System.out.println(phrasemutation3);
 }
}

然而,当输入任何有空格的东西时,只会输入第一个单词。搜索网站只会给我如何删除它们的结果,但我想保持空格不变。有没有办法做到这一点,或者至少用下划线替换它们?

另外,如果出现一些初学者格式错误,我会很高兴听到它们。

4 个答案:

答案 0 :(得分:3)

String phrase = userinput.next();
  

查找并返回此扫描仪的下一个完整令牌。在完成令牌之前和之后是与分隔符模式匹配的输入。即使之前的hasNext()调用返回true,此方法也可能在等待输入扫描时阻塞。   改为:

  String phrase = userinput.nextLine();
  

使此扫描程序超过当前行并返回跳过的输入。此方法返回当前行的其余部分,不包括末尾的任何行分隔符。该位置设置为下一行的开头。   由于此方法继续搜索输入以查找行分隔符,因此如果不存在行分隔符,它可以缓冲搜索要跳过的行的所有输入。

答案 1 :(得分:2)

您可能希望熟悉Javadoc。 Scanner明确指出:

  

扫描程序使用分隔符模式将其输入分解为标记,分隔符模式默认匹配空格。

因此每个next都会为您提供一个由空格分隔的单词:

  

next()hasNext()方法及其基本类型的伴随方法(例如nextInt()hasNextInt())首先跳过与分隔符模式匹配的任何输入,然后尝试返回下一个令牌。

您可以使用useDelimiter或在构造函数中更改分隔符以匹配新行。

正如此处其他所有人所建议的那样,您只需使用nextLine

至于代码的其他改进,我会使用System.lineSeparator()而不是各种\n\r来熟悉自己。

答案 2 :(得分:1)

使用userinput.nextLine()来获取文本而不是单个字符串。

userinput.next()只会获得下一个字符串(由空格分隔的字符串)。

答案 3 :(得分:1)

你试过吗

String phrase = userinput.nextLine();

nextLine()方法读取所有内容,包括空格,直到遇到换行符。