我试图制作一个读取文件的扫描仪并删除每个单词之间的空格。我可以得到这么多,但我不能把它带到他们在同一条线上的地方。我无法让程序读取一行,删除空格,然后转到下一行。这是我的练习项目中的文字:
four score and seven years ago our fathers brought forth on this continent a new nation
我目前只获得第一行
这是我的代码:
import java.util.*;
import java.io.*;
public class CollapseSpace {
public static void main (String[] args) throws FileNotFoundException{
Scanner fileInput = new Scanner(new File ("textwithspaces.txt"));
String nextLine = fileInput.nextLine();
Scanner lineInput = new Scanner(nextLine);
while(fileInput.hasNext()){
nextLine = fileInput.nextLine();
while(lineInput.hasNext()){
System.out.print(lineInput.next() + " "); // I tried to add a fileInput.NextLine() to consume the line but it isn't working properly
}
System.out.println();
}
}
}
答案 0 :(得分:1)
如果您只需要逐行迭代并删除单词之间的空格,那么您只需要一个循环,下面的示例代码应该可以做到这一点
public static void main (String[] args) throws FileNotFoundException{
final Scanner fileInput = new Scanner(new File ("src/main/resources/textwithspaces.txt"));
while(fileInput.hasNext()){
final String nextLine = fileInput.nextLine();
// remove all spaces
final String lineWithOutSpaces = nextLine.replaceAll("\\s+","");
System.out.println(lineWithOutSpaces);
}
}
答案 1 :(得分:0)
首先,您不应该使用*
来导入类。它通常被认为是"糟糕的做法"因为它可以干扰你自己的课程,所以也不是很明确。
您需要在自己的循环中循环nextLine方法。并且使用字符串的replaceAll方法也会很好。
我在下面展示了一个例子:
import java.util.Scanner;
import java.io.File;
import java.io.FileNotFoundException;
class Main {
public static void main(String[] args) throws FileNotFoundException {
// Create an object to represent a text file
File file = new File("textwithspaces.txt");
// Create a scanner with the text file as argument
Scanner scannerWithFile = new Scanner(file);
// Continue as long as it has a next line
do {
// Replace strings
String thisLine = scannerWithFile.nextLine();
// Only print the line out if not empty
if (!thisLine.isEmpty()) {
// Replace all spaces
thisLine = thisLine.replaceAll(" ", "");
// Print
System.out.println(thisLine);
}
} while (scannerWithFile.hasNext());
}
}
我还将你的while循环切换到do while循环,这样你就可以立即进入循环而不必先检查一个条件,它是在下一次迭代之前完成的。
答案 2 :(得分:-1)
你最大的问题是你在循环之外声明nextLine = fileInput.nextLine();
,然后在Scanner lineInput = new Scanner(nextLine);
中使用它,所以它成为文本的第一行,但后来永远不会改变。
我也同意另一条评论说你不应该使用*
,这被认为是不好的做法,因为你导入了很多你不会使用的东西。
我重构了你的代码以使其有效。
import java.util.Scanner;
import java.io.File;
import java.io.FileNotFoundException;
public class Main {
public static void main (String[] args) throws FileNotFoundException{
Scanner fileInput = new Scanner(new File ("textwithspaces.txt"));
while(fileInput.hasNext()){
String nextLine = fileInput.nextLine();
Scanner lineInput = new Scanner(nextLine);
while(lineInput.hasNext()){
System.out.print(lineInput.next() + " ");
}
System.out.println();
}
}
}