【问题标题】:Storing multi line string as 2d array of chars将多行字符串存储为二维字符数组
【发布时间】:2021-07-10 12:09:06
【问题描述】:

我正在尝试将多行字符串存储为字符数组。 本质上,字符串输入是一个游戏板,其中“#”是墙壁,“”是开放空间。 第一行简单地指定板是 8x8 字符。

字符串作为代码输入:

            "8\r\n"
            + "########\r\n"
            + "P #    #\r\n"
            + "# # ## #\r\n"
            + "# #  #G#\r\n"
            + "#    ###\r\n"
            + "#### # #\r\n"
            + "#G   #G#\r\n"
            + "########";

我想要做的是存储这个多行字符串,以便我得到一个可以像这样存储它的二维数组:

'#''#''#''#''#''#''#''#'
'P'' ''#'' '' '' '' ''#'
'#'' ''#'' ''#''#'' ''#'
etc..

【问题讨论】:

  • 我正在尝试存储 ...实际上,到目前为止,您只向其他人展示了您的作业。我们帮你做作业,我们不这样做。所以:请包括你自己的努力,并清楚地描述你卡在哪里。

标签: java arrays string char


【解决方案1】:

试试这个。

String input = "8\r\n"
    + "########\r\n"
    + "P #    #\r\n"
    + "# # ## #\r\n"
    + "# #  #G#\r\n"
    + "#    ###\r\n"
    + "#### # #\r\n"
    + "#G   #G#\r\n"
    + "########";
char[][] result = input.lines()
    .skip(1)
    .map(String::toCharArray)
    .toArray(char[][]::new);
for (char[] line : result)
    System.out.println(Arrays.toString(line));

输出:

[#, #, #, #, #, #, #, #]
[P,  , #,  ,  ,  ,  , #]
[#,  , #,  , #, #,  , #]
[#,  , #,  ,  , #, G, #]
[#,  ,  ,  ,  , #, #, #]
[#, #, #, #,  , #,  , #]
[#, G,  ,  ,  , #, G, #]
[#, #, #, #, #, #, #, #]

【讨论】:

  • 完美! @saka1029,我从 Java 11 开始就不知道 String 的 lines 方法了。
【解决方案2】:

使用 Stream API 试试这个:

     String str = "8\r\n"
            + "########\r\n"
            + "P #    #\r\n"
            + "# # ## #\r\n"
            + "# #  #G#\r\n"
            + "#    ###\r\n"
            + "#### # #\r\n"
            + "#G   #G#\r\n"
            + "########";

     char[][] result = Arrays.stream(str.split("\r\n"))
                             .skip(1)
                             .map(String::toCharArray)
                             .toArray(char[][]::new);

【讨论】:

    【解决方案3】:

    然后是非流方法。

    • 在行终止符上拆分行
    • 分配一个 char 数组 (charArray) 来保存除第一行以外的所有内容
    • 对于每一行,将该行转换为字符数组并分配给charArray,确保从第二行开始。
    String[] lines = input.split("\r\n");
    char[][] charArray = new char[lines.length-1][];    
    for (int i = 0; i < charArray.length; i++) {
        charArray[i] = lines[i+1].toCharArray();
    }
    for(char[] c : charArray) {
        System.out.println(Arrays.toString(c));
    }
    

    打印

    [#, #, #, #, #, #, #, #]
    [P,  , #,  ,  ,  ,  , #]
    [#,  , #,  , #, #,  , #]
    [#,  , #,  ,  , #, G, #]
    [#,  ,  ,  ,  , #, #, #]
    [#, #, #, #,  , #,  , #]
    [#, G,  ,  ,  , #, G, #]
    [#, #, #, #, #, #, #, #]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-10
      • 2018-12-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多