【问题标题】:Using a delimiter in scanner; ignoring spaces & new lines在扫描仪中使用分隔符;忽略空格和换行符
【发布时间】:2018-08-26 09:47:58
【问题描述】:

早安,

我正在尝试使用扫描仪读取 txt 文件,并将字符保存到二维字符串数组中。 txt 文件由 8 行字符组成,不以空格分隔。如果它们用空格分隔,或者如果字符都在一行中,我的程序可以工作(如果你删除分隔符),或者(包括分隔符)没有空格。

如果有人能告诉我如何正确保存字符,将不胜感激。问题出在带有双 for 循环的 Read() 函数中。我尝试添加另一个分隔符(s.useDelimiter(s.nextLine())),但我不知道如何实现它。

请记住,这是我第一次使用文件扫描仪,而且我只是在学习编程,因此我的代码不会很高级。

亲切的问候, 马修

import java.util.Scanner;
import java.io.File;
import java.io.FileNotFoundException;

public class BoardFile {

    String[][] board = new String[8][8];
    Scanner s;

    // Print the board
    public void Printboard() {
        for (int i = 0; i < 8; i++) {
            for (int j = 0; j < 8; j++) {
                System.out.print(board[i][j]);
            }
            System.out.println();
        }
    }

    public void Open() {
        try {
            s = new Scanner(new File("**TXT FILE PATHNAME HERE**"));
        } catch (FileNotFoundException e) {
            System.out.println("Error");
        }
    }

    public void Read() {
        s.useDelimiter("");
        for (int i = 0; i < 8; i++) {
            for (int j = 0; j < 8; j++) {
                String a = s.next();
                board[i][j] = a;
            }
        }   
    }

    public static void main(String[] args) {
        BoardFile a = new BoardFile();
        a.Open();
        a.Read();
        a.Printboard();
    }
}

txt 文件: https://www.dropbox.com/s/k8fkneg2dcw0cbe/abcde.txt?dl=0

【问题讨论】:

  • 如果你的板子数组真的应该是 8 个字符乘 8 行,那么它的类型可能应该是 char[][],而不是 String[][]。至于阅读 - 我认为最好在不更改分隔符的情况下阅读整行,然后使用 toCharArray() 将该行分解为字符。

标签: java arrays java.util.scanner


【解决方案1】:

使用扫描仪的 nextline() 和 split() 函数将结果读入二维数组

public void Read() {
        for (int i = 0; i < 8; i++) {
                board[i]= s.nextLine().split("");
            }
        }   

【讨论】:

    【解决方案2】:

    对于二维数组,你应该使用 char[][] 而不是 String[][] 这是有效的程序。

    package com.jvit.vm;
    
    import java.io.File;
    import java.io.FileNotFoundException;
    import java.util.Scanner;
    
    public class BoardFile {
    
        char[][] board = new char[8][8];
        Scanner s;
    
        // Print the board
        public void Printboard() {
            for (int i = 0; i < 8; i++) {
                for (int j = 0; j < 8; j++) {
                    System.out.print(board[i][j]);
                }
                System.out.println();
            }
        }
    
        public void Open() {
            try {
                s = new Scanner(new File("test.txt"));
            } catch (FileNotFoundException e) {
                System.out.println("Error");
            }
        }
    
        public void Read() {
            s.useDelimiter("\n");
            for (int i = 0; i < 8; i++) {
                char[] chars = s.next().toCharArray();
                for (int j = 0; j < 8; j++) {
                    board[i][j] = chars[j];
                }
            }
        }
    
        public static void main(String[] args) {
            BoardFile a = new BoardFile();
            a.Open();
            a.Read();
            a.Printboard();
        }
    }
    

    【讨论】:

      【解决方案3】:
      public void Read() {
          String[] delimeter = { " ", "\\.", ",", "\\z"}
          for (String delimeter : delimeter)
          {
              Scanner scanner = new Scanner(args[0]);
                  for (int i = 0; i < 8; i++) {
                      for (int j = 0; j < 8; j++) {
                      String a = s.next();
                      board[i][j] = a;
                  }
              }   
              scanner.useDelimiter(delimeter);
              String t = scanner.next();
      
          }
      

      【讨论】:

        【解决方案4】:

        您可以使用扫描仪跳过方法(如下所示)模式“\n*”表示输入中的一个或多个换行符

        public void Read() {
            s.useDelimiter("");
            for (int i = 0; i < 8; i++) {
                for (int j = 0; j < 8; j++) {
                    s.skip("\n*");
                    String a = s.next();
                    board[i][j] = a;
                }
            }   
        }
        

        【讨论】:

          猜你喜欢
          • 2014-04-03
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多