【问题标题】:Converting String returned from Scanner nextLine() to String array将从 Scanner nextLine() 返回的字符串转换为字符串数组
【发布时间】:2022-10-17 04:39:10
【问题描述】:

我的要求是我需要将从 Scanner 的 nextLine() 方法获取的字符串输入转换为字符串数组:

我的代码:

Scanner sc= new Scanner(System.in); 
String myString = sc.nextLine(); 

当我在控制台中输入以下内容时,上面的代码工作正常:新字符串[]{"A:22","D:3","C:4","A:-22"}

但我的挑战是读取扫描仪输入并将其分配给字符串数组,如下所示:

String[] consoleInput=sc.nextLine();

我有一个不兼容的类型错误,这是正常的,因为 String 无法转换为 String 数组。有没有办法在上面的行中将 sc.nextLine() 转换为 String 数组?

【问题讨论】:

  • 您对数组的期望到底是什么?
  • 我期待"A:22","D:3","C:4","A:-22"从输入字符串新字符串[]{"A:22","D:3","C:4","A:-22"}
  • 基本上是myString.replaceFirst("^\\Qnew String[]{\"\\E","").replaceFirst("\\Q\"}\\E$","").split("\",\"", -1)? (假设引号不应包含在字符串中)

标签: java arrays string


【解决方案1】:

如果您按字面意思输入new S 等(您输入new String[] {"A:22", "D:3"} 并且您希望在扫描仪上使用一种方法,以便获得包含该数据的字符串),这非常复杂,并且涉及到链接一个 java 编译器。如果你问这种问题,可能远远超出你目前的技能水平。

但是,您可以做的只是要求用户输入以下内容:

A:22 D:3 C:4 A:-22

只需.nextLine().split(" ") 和瞧:首先读取一行,然后通过查找空格作为分隔符将该行拆分为字符串数组。

【讨论】:

  • 用户想要与我描述的完全相同的输入,我有剩余输入的所有可能变体的解决方案。感谢您的快速回复。
【解决方案2】:
Scanner sc = new Scanner(System.in); 
String myString = sc.nextLine(); 

String[] arr = myString.replaceAll("[ "{}]", "").split(",");

解释:replaceAll 中的正则表达式将字符 "{、'}, and `(空格字符)替换为空字符串。然后,您只需将字符串沿所有逗号拆分,即可得到一个包含用户输入的所有标记的字符串数组。

笔记:正则表达式也会删除所有空格,因此如果您的标记中有空格,那么它们将被删除。但是,根据我从您的问题中收集到的信息,数组元素中不会有任何空格。

【讨论】:

  • 谢谢你。从我的输入字符串中,我只需要提取"A:22","D:3","C:4","A:-22"输入字符串:新字符串[]{"A:22","D:3","C:4","A:-22"}
【解决方案3】:

修改了replaceAll() 方法中的正则表达式模式:

String[] strArr = s.nextLine().replaceAll("[ "{}\]\[(new|String)]", "").split(",");

打印字符串数组 strArr 时的输出:

A:22 
D:3
C:4
A:-22

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-05-12
    • 1970-01-01
    • 2012-10-27
    • 1970-01-01
    • 2019-04-24
    • 1970-01-01
    • 2015-07-04
    • 2011-06-18
    相关资源
    最近更新 更多