【问题标题】:Converting a string into an List [closed]将字符串转换为列表 [关闭]
【发布时间】:2014-10-01 19:43:06
【问题描述】:

有没有一种不那么混乱的方法可以将 String "[1,2,3]" 转换为 List<Long> ?我试图找到一些好的方法,但大多数都需要很多步骤

【问题讨论】:

  • 你的字符串是有效的 JSON,你可以使用 Jackson 的 ObjectMapper 来做,但看起来有点过头了
  • 你尝试了哪些方法?您认为“许多”步骤是什么?
  • 欢迎来到 SO。请阅读此guide。您需要解析该字符串。

标签: java string


【解决方案1】:

由于这是一个数组的 JSON 表示,您可以使用任何 JSON api。

例如使用Jackson:

String s = "[1,2,3]";
long[] a = new ObjectMapper().reader(long[].class).readValue(s);
List<Long> l = new ObjectMapper().reader(List.class).readValue(s);

【讨论】:

    【解决方案2】:

    一个巧妙的方法是

    String s = "[1,2,3]"
    s=s.sbustring(1,s.length-1);
    List<Long> numLongs = new ArrayList<Long>();
    for(String eachString: s.split(",")){
        try {
            numLongs.add(Long.parseLong(eachString))
        } catch (NumberFormatException e){
            System.out.println("failed to convert : "+s); 
        }
    }
    

    【讨论】:

      【解决方案3】:

      怎么样?

      String x = "[1,2,3]";
      List<Long> myList = new ArrayList<>();
      for(String s : x.substring(1,x.length()-1).split(",")) {
          myList.add(Long.valueOf(s));
      }
      

      String x = "[1,2,3]";
      List<Long> myList = new ArrayList<>();
      for(String s : x.replaceAll("\\[|\\]","").split(",")) {
          myList.add(Long.valueOf(s));
      }
      

      【讨论】:

        【解决方案4】:

        这样做:

        public static void main(String[] args) {
        
                String str= "[1,2,3]";
                String []arr=str.substring(1, str.length()-1).split(",");
                List<Long>list=new ArrayList<Long>();
               for(int i=0;i<arr.length;i++){
                   list.add(Long.parseLong(arr[i]));
               }
               System.out.println(list);
        
            }
        

        【讨论】:

          【解决方案5】:

          在 Java 8 中

              String str = "1,2,3";
              String[] sp = str.split(",");
              List<String> listSt = Arrays.asList(sp);
              listSt.forEach(System.out::print);
              List<Long> listLong = listSt.stream().map( str1 -> Long.parseLong(str1)).collect(Collectors.toList());
              listLong.forEach(System.out::print);
          

          【讨论】:

          • 使用asList 并不是必须的; Arrays有自己的静态stream()方法,即Arrays.stream(sp).map...
          猜你喜欢
          • 2021-02-17
          • 1970-01-01
          • 1970-01-01
          • 2022-01-03
          • 2019-08-17
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多