【问题标题】:How to extract these integer values from ArrayList<String> [duplicate]如何从 ArrayList<String> 中提取这些整数值 [重复]
【发布时间】:2016-05-15 02:07:14
【问题描述】:

我有一个ArrayList&lt;String&gt; abc,我在其中得到了这个值[64.3, 25.1, 44.3, 34.2, 6.4, 48.5, 35.5, 59.5, 54.6, 26.6, 11.2, 50.3, 25.1]

现在我想从中提取整数值,例如64,25,44,34,6,48,35,59,54,26,11,50,25,并将这些值放入整数数组int[] cab

我怎样才能得到这个?如何从中删除小数点和小数点后的值?

【问题讨论】:

  • 但这是 ArrayList 不是双数组
  • @AndroidGeek 你不认为这是一个非常重要的信息,可以添加到问题中吗? (点击“编辑”链接)我的意思是,对于其他人来说,它看起来像 ArrayList&lt;Double&gt;,所以说它们是 String 对象有点重要,你知道的。
  • 使用迭代器从数组列表中提取值并转换为int
  • @Andreas 我在问题主题中提到过
  • 为什么人们没有仔细阅读我的问题就对我的问题投了反对票。这不是我的错,是读者的错

标签: java android arraylist number-formatting


【解决方案1】:
  1. 字符串加倍

  2. 双倍整数

    for(int i = 0 ; i < abc.size(); ++i) {
        tmp = Double.parseDouble(abc.get(i));
        cab[i] = (int)tmp;
        System.out.println(cab[i]);
    }
    

【讨论】:

    【解决方案2】:

    简单地迭代:

    int[] cab = new int[abc.size()];
    for(int i = 0; i < cab.length; i++){
        cab[i] = (int)Float.parseFloat(abc.get(i));
    }
    

    【讨论】:

    • 无法将 java.lang.string 转换为 int
    • 你的 List abc 的类型是什么?
    • 我已经提到它是字符串
    • 不在第一个版本中。无论如何,请检查编辑后的答案。
    • java.lang.NumberFormatException: Invalid int: "64.3"
    【解决方案3】:

    在 Java 8 中:

    int[] cab = abc.stream()
            .map(Double::valueOf)
            .mapToInt(Double::intValue)
            .toArray();
    

    【讨论】:

    • 无法解析符号流()
    • @AndroidGeek 好吧,如果您使用的是 Android,那么您没有 Java 8。
    【解决方案4】:

    试试这个:

    Integer cab[] = new Integer[abc.size()];
    cab= abc.toArray(cab);
    
    //iterating array
    for (Integer cabs: cab) {
    System.out.println("cab= " + cabs);
    }
    

    【讨论】:

      【解决方案5】:
      ArrayList<Integer> newList = new ArrayList<Integer>(stringsList.size());
      for (String myInt : strings){
          int intVal = (int)Double.parseDouble(myInt);
          newList.add(intVal);
      }
      

      stringsList 是你的数组列表

      【讨论】:

        【解决方案6】:

        使用此代码

        Iterator itr = al.iterator();
                  while(itr.hasNext()) {
        
                     String s1=itr.next().toString();
                     Double d=new Double(s1);
                     int s2=d.intValue();
                     System.out.print(s2 + " ");
                  }
        

        【讨论】:

        • 为什么不使用for 循环?为什么不使用泛型? Double.parseDouble(s1) 会更好,因为它不会为结果创建包装对象。
        【解决方案7】:

        以下是三种不同(但相似)的方法,具体取决于 Java 版本和/或偏好:

        ArrayList<String> abc = new ArrayList<>(Arrays.asList(
                "64.3", "25.1", "44.3", "34.2", "6.4", "48.5", "35.5",
                "59.5", "54.6", "26.6", "11.2", "50.3", "25.1" ));
        System.out.println("abc = " + abc);
        
        // Loop (all Java versions)
        int[] cab1 = new int[abc.size()];
        for (int i = 0; i < cab1.length; i++)
            cab1[i] = (int)Double.parseDouble(abc.get(i));
        System.out.println("cab1 = " + Arrays.toString(cab1));
        
        // Java 8 stream with lambda expression
        int[] cab2 = abc.stream()
                        .mapToInt(v -> (int)Double.parseDouble(v))
                        .toArray();
        System.out.println("cab2 = " + Arrays.toString(cab2));
        
        // Java 8 stream with method references
        int[] cab3 = abc.stream()
                        .map(Double::valueOf)
                        .mapToInt(Double::intValue)
                        .toArray();
        System.out.println("cab3 = " + Arrays.toString(cab3));
        

        输出

        abc = [64.3, 25.1, 44.3, 34.2, 6.4, 48.5, 35.5, 59.5, 54.6, 26.6, 11.2, 50.3, 25.1]
        cab1 = [64, 25, 44, 34, 6, 48, 35, 59, 54, 26, 11, 50, 25]
        cab2 = [64, 25, 44, 34, 6, 48, 35, 59, 54, 26, 11, 50, 25]
        cab3 = [64, 25, 44, 34, 6, 48, 35, 59, 54, 26, 11, 50, 25]
        

        【讨论】:

        • 循环(所有 Java 版本)它给了我索引越界异常
        • @AndroidGeek 我执行了那个代码来生成那个输出,所以你一定是复制错了。
        • 好的,我再做一次
        • 又试了一次,但还是同样的错误 java.lang.ArrayIndexOutOfBoundsException: length=13;索引=13 :(
        猜你喜欢
        • 1970-01-01
        • 2014-03-14
        • 2017-06-15
        • 2016-08-23
        • 2023-03-16
        • 2014-10-17
        • 1970-01-01
        • 2019-11-16
        • 1970-01-01
        相关资源
        最近更新 更多