2016-03-26 32 views
0

我有一個任務閱讀一個文本文件有幾行,之後,我需要計算每個字符的UNICODE值,所以「你好」的總和是532和「如何你是「是1059等等,每一個字符串都在.txt文件中以新行開始,並且迄今爲止非常好。 但是,對於每一行我只需要打印自己的值,以及我的代碼的工作方式,它會添加每行的值,並且我不能在lxtine的結尾到來時阻止它,所以它看起來像: *讀取線 *計char值 *加起來 *打印出來 *重新開始下一行,等等JAVA - 從文本文件讀取,識別新行

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

OP,簡稱: 我怎樣才能知道新線開始時(如果這能幫助我的情況) –

回答

0

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

+0

多個動作,因爲總和顯示在後面做。 – RubioRic

+0

@RubioRic在問題中沒有提到,但是,如果有必要,那麼可以添加另一個varibale。等等,我正在編輯它。 – Hackerdarshi

+0

這不是明確的問題,但您的原始解決方案會爲OP帶來另一個問題。 – RubioRic

1

如果我理解正確,對於輸入:

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

一個簡單的解決方案是限制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值。我做了一些改進。

0

有兩個變量,一個用於最終和,另一個用於換行。

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

}這裏