1

所以我有一个文本文件(file.txt),里面有一个很长的数字。基本上,这个数字就像 PI 的数字。我需要从文件中一次读取 10 位数字。例如:

文件编号:

3.14159265358979323846264338327950288419716939937510582097494459230781640628

我需要获取它的前十位数字:3.141592653并将其传递给返回trueor的函数false。如果我收到 a true,则函数停止并返回这 10 位数字。如果这个数字是假的,那么我取接下来的 10 位数字,1415926535并将其传递给函数。

我将如何一次读取 10 个数字的文件。

4

6 回答 6

0

这是一些可以帮助您入门的通用代码:

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;
}
于 2013-10-28T12:20:21.123 回答
0

您可以将此行添加到 String 变量并使用 '.' 对其进行子串化。然后只获取小数部分并将它们分成 10 的大小并将其存储到一个数组中。

如果您发布您的代码,我们可以提供更多帮助。

要分块,您可以使用子字符串

于 2013-10-28T11:50:01.547 回答
0

好的,这是一个草稿,将此逻辑构建到您现有的代码中,编辑您的问题,我们可以帮助您完成它。

使用的关键方法是 FileReaders read() 方法来获取单个字符(如果没有更多,则为 -1)和 skip() 以忽略一定数量的字符(已经处理)

(抱歉我的格式有点匆忙)

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

    }

}   
于 2013-10-28T11:58:14.227 回答
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;
        }
    }
}
于 2013-10-28T12:09:24.447 回答
0

使用 Apache Commons 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);
...
于 2013-10-28T12:27:00.653 回答
-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;
}
于 2013-10-28T11:57:20.807 回答