【问题标题】:Efficient way to split a number in Java [duplicate]在Java中拆分数字的有效方法[重复]
【发布时间】:2015-03-20 23:36:23
【问题描述】:

我正在努力寻找一种将数字拆分为列表的有效方法。

例如,对于数字:

23464646237

ArrayList <Integer> vector;

我想在数组的每个位置插入一个数字,因此获得以下输出:

vector = {2,3,4,6,4,6,4,6,2,3,7}

我怎样才能在 Java 中以干净有效的方式做到这一点?

提前致谢

【问题讨论】:

  • 到目前为止你做了什么?
  • @MarsAtomic 不一样
  • @MarsAtomic 因为我担心这里的效率,而不仅仅是阅读部分
  • 您可能想详细阅读所有这些答案,因为有一些关于效率的讨论。特别注意模数解决方案。所有这些字符串的修改都是快速而肮脏的,但效率不高。

标签: java arraylist integer


【解决方案1】:

parseInt 不需要,

for(int i = 0; i < numberAsString.length(); i++)
    vector.add((int)numberAsString.charAt(i) - 48);

这将检索该位置数字的 ASCII 值,然后减去 48,即表中 0 的值。

从 -127 到 127 的数字被缓存,所以我相信这将是最有效的方法(请注意,我不是 100% 确定)。但无论如何,只是尝试提供一种保存parseInt 调用的方法,因为您要求高效。

【讨论】:

    【解决方案2】:

    你可以这样做:

    List<Integer> vector = Arrays.asList(String.valueOf(number).split(""))
                .stream()
                .map(Integer::parseInt)
                .collect(Collectors.toList());
    

    【讨论】:

      【解决方案3】:

      只需将您的号码设为字符串,然后使用 charAt() 方法将字符串的每个字符添加到列表中。

      public static ArrayList<Object>vect=new ArrayList<Object>();
      
      
      public static void main(String[] args){
          String y="123321312312";
          for (int i=0;i<y.length();i++){
              vect.add(y.charAt(i));
          }
      }
      

      【讨论】:

        【解决方案4】:

        首先不要将其转换为字符串。因为它会更快地处理数值。所以你可以使用:

        long nr = 23464646237;
        while (nr > 0)
        {
            vector.add(nr % 10);
            nr /= 10;
        }
        

        【讨论】:

        • 循环的最后一行应简化为nr /= 10;
        • 我已经编辑过了,谢谢
        • @bmavus 这不会编译,你会得到一个错误,说 23464646237 对于整数来说太大了。将您的声明更改为long nr = 23464646237l;
        【解决方案5】:

        试试这个:

        long yourNumber = 23464646237L;
        ArrayList<Integer> vector = new ArrayList<Integer>();
        String numStr = String.valueOf(yourNumber);
        for(int i=0;i<numStr.length();i++)
        {
            vector.add(Integer.valueOf(numStr.charAt(i)));
        }
        

        【讨论】:

        • 我没有投反对票,但是,numStr 不是按索引排列的数组。
        • 谢谢。我与 C++ 混淆了,您可以在其中使用 [] 访问字符串索引处的字符:)
        • @DermotBlair 这不会编译,你会得到一个错误,说23464646237 对于整数来说太大了。将您的声明更改为long yourNumber = 23464646237l;
        • @Jean-FrançoisSavard 现在更新了,谢谢。
        • @DermotBlair 不客气 :)。
        猜你喜欢
        • 2015-05-29
        • 1970-01-01
        • 2011-02-22
        • 1970-01-01
        • 2012-03-02
        • 2019-09-04
        • 1970-01-01
        • 2017-08-09
        • 1970-01-01
        相关资源
        最近更新 更多