【问题标题】:How to read in values from a single line in a txt file [duplicate]如何从 txt 文件中的单行读取值[重复]
【发布时间】:2021-11-27 00:51:46
【问题描述】:

所以我正在尝试读取以下数据并将其拆分为一个数组。但是txt文件只有一行。

1、5、3、7、9、5、3、1、9、5、7、3、7、5、9、1、3、5

我不确定我的代码是否正确。

 try { 
      File cars = new File("cars.txt");
      Scanner myReader = new Scanner(cars);
      String data = myReader.nextLine();
      while (myReader.hasNextLine()) {
        data = myReader.nextLine();
        String values[] = data.split(",");
        System.out.print(values);
      }

【问题讨论】:

  • Scanner 类有一个 useDelimiter 方法,看起来很有用,在这里。
  • 试试BufferedReader,这回答了你的问题stackoverflow.com/questions/4716503/…
  • 我的建议:连接一个 List 而不是 Array,每次阅读另一行时,将该行发送到一个方法中,该方法将其拆分为数字并将所有这些添加到现有列表中。在一天结束时,您将获得所有数字的完整列表。如果你只有一条线,那又如何?
  • 行“字符串数据 = myReader.nextLine();”读取该行,这意味着在下一行,“myReader.hasNextLine()”将返回 false,并且您的 while 循环的内容永远不会运行。将前一行更改为“字符串数据;”或在循环内实例化字符串。
  • 按照 bschellekens 所说的做,而不是 System.out.print(values);System.out.print(Arrays.toString(values));

标签: java java.util.scanner txt


【解决方案1】:

另一个例子。 BufferedReader、try-with-resources 和流。

    File file = new File("src/defaultpackage/cars.txt");

    try (BufferedReader br = new BufferedReader(new FileReader(file))) {

        String line = null;

        while ((line = br.readLine()) != null) {

            String[] arr = line.split(",");

            for (int i = 0; i < arr.length; i++) {

                System.out.println(arr[i]);

            }

        }

    } catch (Exception e) {
        e.printStackTrace();
    }

    System.out.println("end of file");

【讨论】:

  • 您没有充分利用 Streams。您正在获取一个数组,将其转换为流,然后再次将其转换回数组。没什么意义。
  • 你是对的,谢谢。没有必要。已编辑。
【解决方案2】:

如何从 txt 文件中的单行读取值

我会这样做的。

  • [\\s+,]+ - 使用任意混合空格和逗号(包括多个逗号)的分隔符。
try (Scanner myReader = new Scanner(new File("f:/cars.txt"))) {
     myReader.useDelimiter(Pattern.compile("[\\s+,]+"));
     while (myReader.hasNextInt()) {
       System.out.println(myReader.nextInt());
     }
} catch (IOException ioe) {
     ioe.printStackTrace();
}


  

【讨论】:

    【解决方案3】:

    我会做这样的事情,没有太多的错误处理或复杂的东西。这是使用单行cars.txt 和多行cars.txt 进行测试的。玩得开心!

    import java.io.File;
    import java.util.ArrayList;
    import java.util.Arrays;
    import java.util.List;
    import java.util.Scanner;
    
    public class Main {
        public static void main(String args[]) throws Exception {
    
            File cars = new File("cars.txt");
            List<Integer> numbers = new ArrayList<>();
    
            Scanner myReader = new Scanner(cars);
    
            while (myReader.hasNextLine()) {
                processLine(myReader.nextLine(), numbers);
            }
    
            myReader.close();
    
            System.out.println(Arrays.deepToString(numbers.toArray()));
        }
    
        private static void processLine(String oneline, List<Integer> numbers) {
            String values[] = oneline.split(",");
            Arrays.stream(values).forEach((value) -> numbers.add(Integer.parseInt(value.trim())));
        }
    }
    

    或者对于初学者来说这可能会更好:

    import java.io.File;
    import java.util.ArrayList;
    import java.util.Arrays;
    import java.util.List;
    import java.util.Scanner;
    
    public class Main {
        public static void main(String args[]) throws Exception {
            File cars = new File("cars.txt");
            List<Integer> numbers = new ArrayList<>();
    
            Scanner myReader = new Scanner(cars);
    
            while (myReader.hasNextLine()) {
                processLine(myReader.nextLine(), numbers);
            }
    
            myReader.close();
    
            System.out.println(Arrays.deepToString(numbers.toArray()));
        }
    
        private static void processLine(String oneline, List<Integer> numbers) {
            String numbersAsStrings[] = oneline.split(",");
            for (int loopIndex = 0; loopIndex < numbersAsStrings.length; loopIndex++) {
                String oneNumberAsString = numbersAsStrings[loopIndex].trim();
                Integer oneNumber = Integer.parseInt(oneNumberAsString);
                numbers.add(oneNumber);
            }
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-09-05
      • 1970-01-01
      • 1970-01-01
      • 2017-08-29
      • 2020-12-17
      • 1970-01-01
      • 2018-11-12
      • 2012-07-03
      相关资源
      最近更新 更多