2013-10-28 52 views
1

所以我有一個文本文件(file.txt),它有一個很長的數字。基本上,這個數字就像PI一樣。我需要從文件中一次讀取10位數字。例如:如何閱讀文本文件的某些塊。 Java

Number文件中:

3.14159265358979323846264338327950288419716939937510582097494459230781640628 

我需要它的第一個十個位數:3.141592653並把它傳遞到一個函數,返回 或truefalse。如果我收到true,則該功能停止並返回那些10 數字。如果數字爲假,那麼我將接下來的10位數字1415926535,並將其傳遞給函數 。

我該如何去讀取文件中的10位數字。

+5

請分享您的嘗試,到目前爲止,你在哪裏卡住? –

+0

我不知道如何只拉10個數字段。我可以打開文件並閱讀整個文件。但是,我無法將其限制爲10位數字。 –

+0

所以你說的是你可以得到的文件,你可以閱讀它,但你無法弄清楚如何獲得前10位數字。一個子串,就像它一樣。從第一個索引到第十個的子字符串,然後是下一個10.作爲一個循環。循環直到字符串的結尾。循環中的子字符串。 –

回答

0

你可以得到這一行字符串變量和子字符串使用'。' 然後獲取只有小數部分,並將它們大小爲10並將其存儲到數組中。

如果您發佈您的代碼,我們可以提供更多的幫助。

要塊,你可以使用substring

-1
String text; 
text = "3.14159265358979323846264338327950288419716939937510582097494459230781640628"; 
int index = 0; 
while (index<text.length()) { 
    String string = text.substring(index, Math.min(index+10,text.length())); 

    //function to process 10 digits. if true break 
    if(processDigits(string)) 
     break; 

    index+=10; 
} 
+0

他想從一個文本文件加載數據 - 不是將數值硬編碼到他的程序中。 – Izmaki

+1

@Izmaki:他知道如何加載它。 –

+0

我認爲。 – Sorter

0

好吧,這裏是一個草案,建立這個邏輯到現有的代碼,編輯您的問題,我們可以幫你完成它。

主要方法使用是FileReaders read()方法來獲得一個單個字符(或-1,如果沒有更多)和跳躍()忽略了一定的字符(已處理)

的(對不起壞格式化即時匆忙位)

import java.io.File; 
import java.io.FileReader; 
import java.io.IOException; 


public class SimpleReader { 

    File theSourceFile = new File("D:\\<yourPath>\\input.txt"); 
    int nrOfCharsToRead = 10; 
    int nrOfCharsProcessed = 0; 

    public static void main(String[] args) { 

     new SimpleReader().process();  
    } 

    public void process(){ 

     System.out.println(getNext(nrOfCharsToRead)); 
     System.out.println(getNext(nrOfCharsToRead)); 
     System.out.println(getNext(nrOfCharsToRead)); 
     System.out.println(getNext(nrOfCharsToRead)); 
     System.out.println(getNext(nrOfCharsToRead)); 
     System.out.println(getNext(nrOfCharsToRead)); 
     System.out.println(getNext(nrOfCharsToRead)); 
     System.out.println(getNext(nrOfCharsToRead)); 
     System.out.println(getNext(nrOfCharsToRead)); 
     System.out.println(getNext(nrOfCharsToRead)); 

    } 

    private String getNext(int nrOfCharsToRead){ 

     try { 

       FileReader reader = new FileReader(theSourceFile); 
       StringBuffer b = new StringBuffer(); 

       reader.skip(nrOfCharsProcessed); 

       char c; 
       int counter = 0; 
       StringBuffer sb = new StringBuffer(); 

       while((c = (char) reader.read()) != -1 && counter < nrOfCharsToRead){ 
        sb.append(c); 
        nrOfCharsProcessed++; 
        counter++; 
       } 

       reader.close(); 

       return sb.toString(); 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } 

     return ""; 

    } 

} 
+0

如果不是在討論一個真正意義上的大文件,而且你有足夠的內存來讀取整個文件,其他答案更容易實現;) – JBA

0

有沒有這樣的事情,希望它有用,我硬編碼值假設你從文本文件

package javaapplication14; 


public class JavaApplication14 { 

    static int strt = 0; 
    static int end = 10; 


    public static void main(String[] args) { 

     String num = "3.14159265358979323846264338327950288419716939937510582097494459230781640628"; 


     boolean val = false; 

     while (val == false) { 
      val = check(num.substring(strt, end)); 
      strt = end; 
      end = end + 10; 
     } 
    } 

    private static boolean check(String substring) { 
     String num = substring; 
     //just for checking (the first ten digits of the string) 
     String chk = "3.14159265"; 
     System.out.println("substr " + substring); 
     if (chk.equals(num)) { 
      System.out.println("equal"); 
      return true; 
     } else { 
      return false; 
     } 
    } 
} 
0

這裏獲得的價值是一些通用代碼W¯¯ HICH應該讓你開始:

String text; 
int index = 0; 

String subText = text.substring(index, index+10); 
while (method(subText) && ((index + 10) < text.length())) { 
    subText = text.substring(index, index + 10); 
    index += 10; 
} 
0

使用Apache下議院IO:

import java.io.File; 
import java.util.Arrays; 

import org.apache.commons.io.FileUtils; 

... 
String fileContent = FileUtils.readFileToString(new File("pi.txt")); 
String tenCharacters = Arrays.toString(fileContent.split("(?<=\\G..........)")); 
doStuff(tenCharacters); 
...