1

如果我在文件中有这一行:2 18 4 3 并且我想将其作为单个整数读取,我怎么能?

我正在使用缓冲区阅读器:

BufferedReader(new FileReader("mp1.data.txt"));

我曾尝试使用:

BufferedReader(new RandomAccessFile("mp1.data.txt"));

所以我可以使用该方法

.readCahr();

但我有一个错误

如果我使用

int w = in.read();

它会读取 ASCII,我想要它原样(12 月)

我想先把它读成一个字符串,但是我可以分开每个数字​​吗?

我也在考虑让每个数字排成一行,但是我拥有的文件很长,带有数字

4

6 回答 6

5

Consider using a Scanner:

Scanner scan = new Scanner(new File("mp1.data.txt"));

You can then use scan.nextInt() (which returns an int, not a String) so long as scan.hasNextInt().

No need for that ugly splitting and parsing :)

However, note that this approach will continue reading integers past the first line (if that's not what you want, you should probably follow the suggestions outlined in the other answers for reading and handling only a single line).

Furthermore, hasNextInt() will return false as soon as a non-integer is encountered in the file. If you require a way to detect and handle invalid data, you should again consider the other answers.

于 2013-07-15T15:27:10.363 回答
1

通过将软件工程中的较大问题分解成较小的问题来解决它们是很重要的。在这种情况下,您有三个任务:

  1. 从文件中读取一行
  2. 把它分解成单独的部分(仍然是字符串)
  3. 将每个部分转换为整数

Java 使这些都变得简单:

  1. 用于BufferedReader.readLine()首先将行作为字符串读取
  2. 看起来分割就像用空格分割一样简单String.split()

    String[] bits = line.split(" ");
    

    如果这还不够好,您可以在split调用中使用更复杂的正则表达式。

  3. 使用 解析每个部分Integer.parseInt()

拆分部分的另一个选择是使用Splitter来自Guava的类。我个人更喜欢这样,但这是一个品味问题。

于 2013-07-15T15:25:56.753 回答
1

您可以split()使用 String 然后使用该Integer.parseInt()方法将所有元素转换为Integer对象。

try {
   BufferedReader br = new BufferedReader(new FileReader("mp1.data.txt"));
   String line = null;
   while ((line = br.readLine()) != null) {
     String[] split = line.split("\\s");
     for (String element : split) {
        Integer parsedInteger = Integer.parseInt(element);
        System.out.println(parsedInteger);
     }
   }
 }
 catch (IOException e) {
   System.err.println("Error: " + e);
 }
于 2013-07-15T15:26:12.427 回答
0

尝试这个;

try{
    // Open the file that is the first 
    FileInputStream fstream = new FileInputStream("textfile.txt");
    BufferedReader br = new BufferedReader(new InputStreamReader(fstream));
    String strLine;
    //Read File Line By Line
    while ((strLine = br.readLine()) != null)   {
        //split line by whitespace 
        String[] ints = strLine.split(" ");

        int[] integers = new int[ints.length];

        // to convert from string to integers - Integer.parseInt ("123")
        for ( int i = 0; i < ints.length; i++) {
            integers[i] = Integer.parseInt(ints[i]);
        }
        // now do what you want with your integer
        // ...
    }
    in.close();
} catch (Exception e) {//Catch exception if any
    System.err.println("Error: " + e.getMessage());
}
于 2013-07-15T15:39:33.170 回答
0

使用 读取该行BufferedReader后,您可以使用String.split(regex)按空格分割字符串的方法("\\s")

    for(String s : "2 18 4 3".split("\\s")) {
        int i = Integer.parseInt(s);
        System.out.println(i);
    }
于 2013-07-15T15:25:54.863 回答
0

如果您使用 Java 7+,则可以使用此实用程序方法:

List<String> lines = Files.readAllLines(file, Charset.forName("UTF-8"));
for (String line: lines) {
    String[] numbers = line.split("\\s+");
    int firstNumber = Integer.parseInt(numbers[0]);
    //etc
}
于 2013-07-15T15:26:01.890 回答