【问题标题】:How can I split a String like [A,B,C] into A B C (Java)如何将 [A,B,C] 之类的字符串拆分为 A B C (Java)
【发布时间】:2021-04-09 04:32:30
【问题描述】:

对于[A,B,C] 之类的输入或逗号和括号之间的输入,如何拆分字符串以将其添加到列表中?

我有这个:

List<String> list = new ArrayList<String>();
String a = "[A,B,C]";
String str[] = a.split(",|\\[|\\]");
list = Arrays.asList(str);
System.out.println(list);

但输出是:[, A, B, C]

如何拆分此字符串以将其添加到列表中? 我要列表=[A,B,C]

【问题讨论】:

  • 你能举个输出的例子吗?
  • 我已经编辑了一个输出示例。
  • 看起来像XY problem。你是怎么得到[A,B,C]的?你的目标是什么?如果它是在某个 List 上调用 toString() 方法并尝试将 String 结果转换回 List 的结果,那么您应该使用序列化和反序列化。如果你想以人类可读的形式来做,你可以使用 JSON 之类的东西。
  • 您只需要删除第一个和最后一个括号。所以String str[] = a.substring( 1, a.length() - 1 ).split( "," );replaceAll 解决方案足够快。

标签: java string list split brackets


【解决方案1】:

省略括号,比使用.replaceAll快:

a = a.substring(1, a.length() - 1); // Substringing removes first and last character
String[] str = a.split(",");

【讨论】:

    【解决方案2】:

    使用正则表达式的解决方案:

    public static void main(String[] args) {
    
        List<String> list = new ArrayList<String>();
        String a = "[A,B,C]";
    
        Pattern p = Pattern.compile("\\w+");
        Matcher m = p.matcher(a);
        while(m.find()) {
            list.add(m.group());
        }
    
        System.out.println(list); //[A,B,C]
    }
    

    匹配输入字符串中的所有字母,并将它们一一添加到列表中。

    【讨论】:

      【解决方案3】:

      一个简单的解决方案是在用逗号分割之前替换括号。

      import java.util.ArrayList;
      import java.util.Arrays;
      import java.util.List;
      
      public class Main {
          public static void main(String[] args) {
              List<String> list = new ArrayList<String>();
              String a = "[A,B,C]";
              String str[] = a.replaceAll("[\\[\\]]", "").split(",");
              list = Arrays.asList(str);
              System.out.println(list);
          }
      }
      

      输出:

      [A, B, C]
      

      【讨论】:

      • 当像[Something[Something]] 这样的输入进入时,您的代码将返回["SomethingSomething"] 而不是["Something[Something]"]
      • @DelfikPro - 您可以想到n 的可能性数量。这个答案专门解决了问题中的问题。
      • if (a.equals("[A,B,C]")) return new String[] {"A", "B", "C"};
      【解决方案4】:

      一种简单的方法是删除括号并以逗号分隔。然后您可以流式传输数组并输入列表。

      String s = "[AAAA,   BBBB ,  CCCCC,DDDDDD]";
      List<String> list =
              Arrays.stream(s.replaceAll("[\\[\\]]","").split("\\s*,\\s*"))
                      .collect(Collectors.toList());
      list.forEach(System.out::println);
      

      打印

      
      AAAA
      BBBB
      CCCCC
      DDDDDD
      

      【讨论】:

        猜你喜欢
        • 2022-06-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-05-30
        • 1970-01-01
        • 2021-12-27
        • 1970-01-01
        相关资源
        最近更新 更多