【问题标题】:What's the best way to convert this string into a string array?将此字符串转换为字符串数组的最佳方法是什么?
【发布时间】:2020-01-29 22:02:57
【问题描述】:

我正在实现一个游戏服务器并将游戏板表示为一个字符串,以这个状态为例:

String b = ", a36, a32, a26, a40, a295, a41, a49, /, , a16, a09, a68, a11, a99, ,"

我想把这个字符串转换成下面的字符串数组:

[, a36, a32, a26, a40, a295, a41, a49, , , , a16, a09, a68, a11, a99, ]

我尝试使用String.split

String[] bArray = b.split("/|,");

这产生:

boardArray = [, a36, a32, a26, a40, a295, a41, a49, , , , a16, a09, a68, a11, a99]

它切断了我想要的数组中的最后一个 " " 元素。修改我的代码并手动添加最后一个元素后:

String[] bArray = b.split("/|,");
bArray = Arrays.copyOf(bArray, bArray.length + 1);
bArray[bArray.length - 1] = "";

这给了我正确的结果,但这个解决方案效率低下。有谁知道如何更干净地做到这一点?

【问题讨论】:

  • 您提供的功能代码似乎并不是非常低效。也许提交到 codereview stackexchange 以获取有关如何改进的想法,而不是在这里。

标签: java arrays string split


【解决方案1】:

试试这个:

b.split("/|,", -1);

这与限制参数(第二个)分开,正如documenation 所说:

limit 参数控制应用模式的次数,因此会影响结果数组的长度。如果限制 n 大于零,则该模式将最多应用 n - 1 次,数组的长度将不大于 n,并且数组的最后一个条目将包含最后一个匹配分隔符之外的所有输入。如果 n 为非正数,则该模式将尽可能多地应用,并且数组可以具有任意长度。如果 n 为零,则该模式将被应用尽可能多的次数,数组可以有任意长度,并且尾随的空字符串将被丢弃。

【讨论】:

  • 这似乎工作得很好。感谢您的帮助。
【解决方案2】:

尝试加载到 List<String> 并遍历该列表。

String b = ", a36, a32, a26, a40, a295, a41, a49, /, , a16, a09, a68, a11, a99, ,";
List<String> myList = Arrays.asList(b.split(","));
System.out.println(myList);

输出:

[,  a36,  a32,  a26,  a40,  a295,  a41,  a49,  /,  ,  a16,  a09,  a68,  a11,  a99,  ]

【讨论】:

    【解决方案3】:

    previous question 中所述,java 默认具有此行为。

    有时您必须自己实现新功能,但这可能不是一个干净的解决方案。

    【讨论】:

    • 这似乎更适合作为评论而不是答案。不过,这个问题似乎更适合 codereview stackexchange。
    猜你喜欢
    • 2013-06-23
    • 1970-01-01
    • 1970-01-01
    • 2017-02-14
    • 1970-01-01
    • 2011-08-11
    • 2014-06-21
    • 2019-03-29
    相关资源
    最近更新 更多