【问题标题】:I want split input string by "\n"我想用“\n”分割输入字符串
【发布时间】:2019-12-11 23:49:53
【问题描述】:

我想用“\n”分割输入字符串,这是我的代码:

import java.util.ArrayList;
import java.util.Scanner;

public class toy_interpreter {

    public static String program;

    public static void getToyProgram() {

        Scanner prog1 = new Scanner(System.in);
        System.out.println("Please enter the toy program");
        program = prog1.nextLine();

    }

    public static String[] splitList() {

        return program.split("\n");
    }

    public static void main(String[] args) {

        getToyProgram();

        String[] parts = splitList();
        String part1 = parts[1];
        System.out.println(part1);      
    }
}

但输出显示: 线程“主”java.lang.ArrayIndexOutOfBoundsException 中的异常:1 在 toy_interpreter.main(toy_interpreter.java:36)

你能帮帮我吗?

【问题讨论】:

  • 你只看了一行program = prog1.nextLine(); - 为什么你认为你可以拆分?
  • 您在程序中只读取一个输入行,因此您的输入中只有一个\n,因此在您的数组中只有一个位置。如果你想从用户那里接收多个Strings,你应该使用循环
  • 您在程序中只读取一个输入行,因此您的输入中只有一个\n,因此在您的数组中只有一个位置。如果你想从用户那里接收多个Strings,你应该使用循环
  • @Henryli 这是一种输入字符串的有趣方式,哈哈。您是否尝试过更改拆分字符?就像输入 "A = 2;B = 8;C = A + B;C" 并用分号分割
  • 也许这可以澄清一些事情:通常当人们谈论字符'\n'ascii table上的十进制10,意思是换行)时,它是一个字符,而不是字符串"\n" (ascii 92 110),它们是两个字符。注意:'"。顺便说一句,没有人使用“\n”作为记录分隔符。如果你这样做,也许你会到达@sidgate 的方法,但我想,你无论如何都不想到达那里。

标签: java


【解决方案1】:

您正在 prog1.nextLine() 读取单行,所以我不确定您希望数组中有多少对象,但我从您的命名约定和错误代码中感觉到您可能没有意识到数组的开头[0],而不是 [1]。

在您的情况下, split() 会将您的整行保存到 [0]。由于它在 lineend 结束,因此数组的长度为 1,因为 split() 不会为空元素创建另一个 String。您正在尝试访问 [1],它是数组的第二个元素,它不存在。因此出现 ArrayOutOfBoundsException!

如果您想将多行保存到 program,请确保不要只使用 = 符号。它会用新的字符串覆盖你以前的字符串。尝试使用 program += 重复使用,或使用 .concat() 方法。无论如何,Java 将在编译期间处理这两者。就此而言,如果您计划从用户输入构建多行字符串,则可能需要查看 StringBuilder 类。

【讨论】:

    【解决方案2】:
    public static String[] splitList() {
        return program.split("\\\\n");
    }
    

    split 函数采用正则表达式。您的输入有一个反斜杠,需要在输入中转义。对于正则表达式,这个反斜杠必须再次转义

    【讨论】:

      猜你喜欢
      • 2016-03-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-12
      • 1970-01-01
      • 1970-01-01
      • 2022-01-18
      • 2021-01-10
      相关资源
      最近更新 更多