繁体   English   中英

JAVA-从文本文件读取,识别新行

[英]JAVA - reading from text file, recognizing new lines

我有一个任务来读取多行文本文件,此后,我需要计算每个字符的UNICODE值,因此“ hello”的总和为532,而“ how you”的总和为1059,依此类推,每个字符串都以.txt文件中的新行,到目前为止一切顺利。 但是对于每一行,我只需要打印其自己的值,并且代码的工作方式将增加每一行的值,并且当lxtine的结尾出现时,我无法设法停止它,因此它看起来像: *读取行*计算字符值*累加*打印它们*从下一行开始,依此类推

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.io.Reader;
import java.lang.String;
import java.util.Arrays;

public class SumLines {

    public static void main(String[] args) {

        String filePath = "/home/lines.txt"; 
        String readLine;
        int sum = 0;

        try (BufferedReader bufferedReader = new BufferedReader(new    FileReader(filePath))) {
            while ((readLine = bufferedReader.readLine()) != null) {
                char[] array = new char[readLine.length()];
                System.out.println(readLine);

                for (int i = 0; i < readLine.length(); i++) {

                    Arrays.fill(array, readLine.trim().charAt(i));
                    sum += (int) array[i];

                    System.out.print(sum + " ");
                }
            }
        } catch (IOException e) {
            System.out.println("Error.\n Invalid or missing file.");
            e.printStackTrace();
        }
       System.out.println("\n*** final " + sum);
    }
}

如果我理解正确,请输入以下内容:

 hello how are you 

您希望获得如下输出:

 hello 532 how are you 1059 *** final 1591 

为此,您需要对代码进行一些修改:

  • 除了计算每行字符值的总和外,还要保留所有行总数的另一个总和
  • 对于每个输入行,打印该行,然后打印字符值的总和
  • 您根本不需要数组
  • 最好只修剪一次输入行,而不是每个字符都修剪一次

像这样:

    int total = 0;

    try (BufferedReader bufferedReader = new BufferedReader(new    FileReader(filePath))) {
        String readLine;
        while ((readLine = bufferedReader.readLine()) != null) {
            String trimmed = readLine.trim();
            int sum = 0;
            for (int i = 0; i < trimmed.length(); i++) {
                sum += (int) trimmed.charAt(i);
            }
            System.out.println(readLine + " " + sum);
            total += sum;
        }
    } catch (IOException e) {
        System.out.println("Error.\n Invalid or missing file.");
        e.printStackTrace();
    }
    System.out.println("\n*** final " + total);

for循环之后,将sum设置为0。如果要打印总和,则需要另一个变量,例如t

像这样:

for (int i = 0; i < readLine.length(); i++) {
    Arrays.fill(array, readLine.trim().charAt(i));
    sum += (int) array[i];
    System.out.print(sum + " ");
}
t=t+sum;
sum=0;

然后在最后打印t

一个简单的解决方案是限制sum变量的范围。 这样,值将不会在两次运行之间保持不变:

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.io.Reader;
import java.lang.String;
import java.util.Arrays;

public class SumLines {

    public static void main(String[] args) {

        String filePath = "/home/lines.txt"; 
        String readLine;
        int totalSum = 0;

        try (BufferedReader bufferedReader = new BufferedReader(new    FileReader(filePath))) {
            String readLine;
            while ((readLine = bufferedReader.readLine()) != null) {
                int sum = 0;

                for (int i = 0; i < readLine.length(); i++) {
                    sum += (int) readLine.charAt(i);
                }

                System.out.println(readLine + ": " + sum);
                totalSum += sum;
            }
        } catch (IOException e) {
            System.out.println("Error.\n Invalid or missing file.");
            e.printStackTrace();
        }
       System.out.println("\n*** final " + totalSum);
    }
}

另外,您不必仅使用复杂的东西就可以获取char的Unicode值。 我做了一些改进。

有两个变量,一个用于最终和,一个用于行和。

  public class SumLines {

public static void main(String[] args) {

    String filePath = "/home/lines.txt"; 
    String readLine;
    int totalSum = 0;
    int lineSum = 0

    try (BufferedReader bufferedReader = new BufferedReader(new    FileReader(filePath))) {
        while ((readLine = bufferedReader.readLine()) != null) {
            char[] array = new char[readLine.length()];
            System.out.println(readLine);

            for (int i = 0; i < readLine.length(); i++) {

                Arrays.fill(array, readLine.trim().charAt(i));
                lineSum += (int) array[i];

                System.out.print(lineSum + " ");
            }
            totalSum += lineSum + totalSum;
            lineSum = 0;
        }
    } catch (IOException e) {
        System.out.println("Error.\n Invalid or missing file.");
        e.printStackTrace();
    }
   System.out.println("\n*** final " + totalSum);
}

}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM