逐行读取文件而不是逐字逐句

时间:2013-12-02 00:06:24

标签: java file input line

我正在尝试编写一些扫描输入文件中的回文的代码,但它从每个单词而不是每一行获取字符串。一个例子是赛车将显示为赛车=回文或太热而不是hoot =回文,但它也会变得太多=不是回文,热=不是回文等。

以下是我正在阅读的文件

File inputFile = new File( "c:/temp/palindromes.txt" );
Scanner inputScanner = new Scanner( inputFile );
while (inputScanner.hasNext())
{
    dirtyString = inputScanner.next();

    String cleanString = dirtyString.replaceAll("[^a-zA-Z]+", "");

    int length  = cleanString.length();
    int i, begin, end, middle;

    begin  = 0;
    end    = length - 1;
    middle = (begin + end)/2;

    for (i = begin; i <= middle; i++) {
        if (cleanString.charAt(begin) == cleanString.charAt(end)) {
            begin++;
            end--;
        }
        else {
            break;
        }
    }
}

3 个答案:

答案 0 :(得分:3)

您需要进行以下更改

更改

while (inputScanner.hasNext()) // This will check the next token.

and 

dirtyString  = inputScanner.next(); // This will read the next token value.

while (inputScanner.hasNextLine()) // This will check the next line.

and dirtyString = inputScanner.nextLine(); // This will read the next line value.

inputScanner.next()将读取下一个标记

inputScanner.nextLine()将读取一行。

答案 1 :(得分:1)

要从文件中读取一行,您应该使用nextLine()方法而不是next()方法。

两者之间的区别是

  

nextLine() - 使此扫描程序超过当前行并返回跳过的输入。

虽然

  

next() - 查找并返回此扫描程序中的下一个完整令牌。

因此,您必须更改while语句以包含 nextLine(),以便它看起来像这样。

while (inputScanner.hasNextLine()) and dirtyString = inputScanner.nextLine();

答案 2 :(得分:0)

FileReader f = new FileReader(file);
BufferedReader bufferReader = new BufferedReader(f);
String line;
//Read file line by line and print on the console
while ((line = bufferReader.readLine()) != null)   {
        System.out.println(line);
}

上面的代码段逐行读取文件中的输入,如果不清楚,please see this for complete program code