簡體   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