简体   繁体   English

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

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

I have a task to read a text file with several lines, after that I need to count every character's UNICODE value, so the sum of "hello" is 532 and for "how are you" is 1059 and so on, every string begins on new line in the .txt document and so far so good. 我有一个任务来读取多行文本文件,此后,我需要计算每个字符的UNICODE值,因此“ hello”的总和为532,而“ how you”的总和为1059,依此类推,每个字符串都以.txt文件中的新行,到目前为止一切顺利。 But for every line I need to print only its own value, and the way my code works, it adds every line's value and I cant get my head around a way to stop it when the end of the lxtine comes so it looks something like: *read line *count char values *add up *print them *start over for the next line, and so 但是对于每一行,我只需要打印其自己的值,并且代码的工作方式将增加每一行的值,并且当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);
    }
}

If I understood correctly, for the input: 如果我理解正确,请输入以下内容:

 hello how are you 

You would like to get something like this as output: 您希望获得如下输出:

 hello 532 how are you 1059 *** final 1591 

For this, you need to make some modifications to your code: 为此,您需要对代码进行一些修改:

  • In addition to calculating the sum of characters values per line, keep another sum of the total of all lines 除了计算每行字符值的总和外,还要保留所有行总数的另一个总和
  • For each input line, print the line followed by the sum of character values 对于每个输入行,打印该行,然后打印字符值的总和
  • You don't need an array at all 您根本不需要数组
  • It's better to trim the input line once, instead of for every character 最好只修剪一次输入行,而不是每个字符都修剪一次

Like this: 像这样:

    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);

After your for loop, set sum to 0. If you want to print the total sum, then you need another variable, say t . for循环之后,将sum设置为0。如果要打印总和,则需要另一个变量,例如t

Like this: 像这样:

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;

Then print t at the end. 然后在最后打印t

A simple solution would be to limit the scope of the sum variable. 一个简单的解决方案是限制sum变量的范围。 That way, values will not persist between runs: 这样,值将不会在两次运行之间保持不变:

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);
    }
}

Also, you don't have to use such complicated stuff just to get the Unicode value of a char . 另外,您不必仅使用复杂的东西就可以获取char的Unicode值。 I made some improvements. 我做了一些改进。

Have two variables, one for final sum and one for line sum. 有两个变量,一个用于最终和,一个用于行和。

  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