【问题标题】:Scanning input into char array Java将输入扫描到 char 数组 Java
【发布时间】:2017-09-23 09:03:05
【问题描述】:

我试图将输入存储为

5 
3DRP 3QEW
8AQW 9ADA

我想以复制粘贴的形式读取该输入并将其放入。我试过这个:

public static void main(String[] args) {

    Scanner scan = new Scanner(System.in);
    String userNumber;
    userNumber = scan.nextLine();
    String[] tokens = userNumber.split("[ ]");
    System.out.println(tokens[1]);
    for(int i = 0; i < tokens.length;i++) {
        System.out.println(tokens[i]);
    }
    scan.close();
}

我的目标基本上是将该输入作为复制粘贴读取到 IDE 中或通过 .txt 文件读取,然后将除空格之外的每个字符存储到 1d 或 2d 的 char 数组中。

【问题讨论】:

  • 您遇到了什么问题?除了split("[ ]");,您的输入似乎不需要。
  • 除此之外:不要使用scanner.close(),因为它会关闭System.in 流。
  • @nullpointer 我想读取整行代码,但是当我复制粘贴时它只读取第一行。我只想读取实际的 ASCII 而不是空格,在这种情况下包含空格

标签: java arrays string list java.util.scanner


【解决方案1】:

据我了解,您想从控制台读取 3 行,删除该文本中的所有空格并将其存储为 char 数组。

如果是这样,你可以这样做:

    int numberOfLinesToRead = 3;
    try(Scanner sc = new Scanner(System.in)){
        StringBuilder buff = new StringBuilder();
        while(numberOfLinesToRead-- > 0){
            String line = sc.nextLine();
            String noSpaces = line.replaceAll("\\s", "");
            buff.append(noSpaces);
        }
        char[] characters = buff.toString().toCharArray();
        System.out.println(Arrays.toString(characters));
    }catch (Exception e) {
        e.printStackTrace();
    }

【讨论】:

  • 除了自动关闭流之外,还有什么特别的理由使用try with resources?对我来说似乎有点矫枉过正,因为 Scanner 不会抛出任何已检查的异常
  • @ChandlerBing 只是一种习惯,在更改流时会派上用场。如果我将System.in 更改为FileInputStream,则无需进行任何修改。
  • @Titus 如果我不知道要阅读的行数怎么办?
  • @Peerless 您必须找到一种停止方法并将其设置为循环的条件。例如,当您在控制台中输入 stop 之类的内容时,您可以停止阅读行。如果您要这样做,您可以将循环的条件更改为此 while(!line.equals("stop")) 并在循环外定义 line 变量
  • @Titus 你不应该关闭扫描仪,因为它也会关闭 System.in,根本不应该关闭。
猜你喜欢
  • 2019-04-15
  • 1970-01-01
  • 1970-01-01
  • 2012-05-19
  • 1970-01-01
  • 1970-01-01
  • 2017-08-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多