出于某种原因,我输入任何东西,我一直在空行 我正在尝试创建一个读取输入的程序,删除所有不必要的空格,但每个单词之间只有一个空格。然后打印出所有的线条。
不使用任何哨兵停止。
import java.util.Scanner ;
import java.lang.Character;
import java.lang.String ;
public class trim
{
public static void main (String[]args)
{
String SongName = " " ;
String Song = " " ;
int i = 0 ;
int count = 0 ;
Scanner scan = new Scanner(System.in);
while(scan.hasNextLine())
{
count++;
scan.nextLine();
}
for ( ; i < count ; i ++)
{
if (scan.hasNext())
{
SongName =scan.nextLine() ;
SongName = SongName.trim() ;
SongName = SongName.replaceAll("\\s+"," ");
if (Song== " " )
{
Song = SongName;
}
else
{
Song = Song + "\n" +SongName ;
}
}
System.out.println(Song) ;
}
}
}
答案 0 :(得分:5)
while(scan.hasNextLine()){
count++;
scan.nextLine();
}
这将在您的程序真正启动之前读取所有输入。
之后(如果程序甚至达到那么远,STDIN通常不会在控制台上关闭),扫描在第二个循环中没有更多东西要读。
此外,小写类名称与大写变量名称一样令人困惑。至少你在这里是一致的; - )
答案 1 :(得分:1)
while (scan.hasNextLine()) {
count++;
scan.nextLine();
}
这对我来说似乎是一个无限循环。它只是继续从控制台读取输入。你继续打字,这一直在阅读。
答案 2 :(得分:0)
将您的输入添加到列表中,然后您可以继续逻辑。我修改了如下代码。
import java.util.Scanner ;
import java.util.ArrayList ;
import java.lang.Character;
import java.lang.String ;
public class trim {
public static void main (String[]args) {
String SongName = " " ;
String Song = " " ;
int count = 0 ;
ArrayList lst = new ArrayList();
Scanner scan = new Scanner(System.in);
while(scan.hasNextLine()) {
lst.add(scan.nextLine());
count++;
}
for (int i=0 ; i < count ; i ++) {
SongName = (String)lst.get(i);
SongName = SongName.trim() ;
SongName = SongName.replaceAll("\\s+"," ");
if (Song== " " ) {
Song = SongName;
}
else {
Song = Song + "\n" +SongName ;
}
}
System.out.println(Song) ;
}
}