我试图进入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);
}
}
然而,当输入任何有空格的东西时,只会输入第一个单词。搜索网站只会给我如何删除它们的结果,但我想保持空格不变。有没有办法做到这一点,或者至少用下划线替换它们?
另外,如果出现一些初学者格式错误,我会很高兴听到它们。
答案 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)