【问题标题】:Save parts of a String split even where there are no values即使没有值,也保存部分字符串拆分
【发布时间】:2019-11-05 12:58:30
【问题描述】:

我想分割字母 A 上的单词行。例如:AoAoAoA 应该产生 [o, o, o],这与我的代码一样。但问题是单词在两个 A 之间没有字符,例如:AoAA 只会导致 [o]。如何调整我的代码以使结果变为 [o,]?

这是因为我想看看分隔符之间是否有相同数量的相同字符。如果有,就会发生一些事情,如果没有,就会发生其他事情。 “AoAA”在 A 之间没有相等数量的“o”,因此应该这样对待。

List<String> myList = new ArrayList <>();
String row = scanner.nextLine();
String [] splitString = row.split ("A");

for (String s : splitString) {
if (!s.equals(splitString[0])) {
myList.add(s);
}}

ps。我知道我的问题似乎是重复的,我尝试了几种与我的问题相似的解决方案,但由于某种原因,它们并没有解决我的问题。例如,通过简单地添加 split (string, int),并没有为我解决任何问题。

【问题讨论】:

  • "AoAA".split("A"); 将导致[, o] 而不是[o][o, ]
  • @SamuelPhilipp 是的,我通过简单地排除第一部分来解决这个问题。由于我的话将以 A 开头和结尾,我认为排除第一部分是明智之举,因为那部分总是空的。
  • @Bubletan 我查看了那个并尝试了他们的解决方案,但没有任何改变,它仍然没有保存列表中的空白部分。
  • "AoAA".split("A") 结果["", "o"]"AoAA".split("A", -1) 结果["", "o", "", ""]。如果你删除第一个和最后一个字符串,你会得到["o", ""],这就是你想要的。
  • 所以你想保留空字符串不被拆分,而不是末尾或开头的空字符串?

标签: java arraylist split


【解决方案1】:

我能想到的一种方法是在实际拆分字符串之前先删除任何前导或尾随As:

String[] result = input.replaceAll("^A|A$", "")
                       .split("A", -1);

这是因为在字符串的两端出现空分割的是前导和尾随的 A。如果我们首先删除那些 A,那么我们将不会得到任何不希望的分裂。

【讨论】:

  • 所以 ^A 表示第一个 A 而 A$ 是最后一个 A?
  • @a.e.m.n 是的。了解更多信息here
【解决方案2】:

使用split(String, int) 版本的split()

List<String> myList = Array.asList(input.replaceAll("^A*", "").split("A", -1));

根据 javadoc:

如果限制为负数,则该模式将被应用尽可能多的次数,并且数组可以有任意长度。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-11-29
    • 1970-01-01
    • 1970-01-01
    • 2012-11-07
    • 1970-01-01
    • 2020-09-13
    • 1970-01-01
    相关资源
    最近更新 更多