【问题标题】:Converting a String with spaces and numbers to an int array with just numbers将包含空格和数字的字符串转换为仅包含数字的 int 数组
【发布时间】:2014-12-25 21:57:52
【问题描述】:

我想将 String lotto int 转换为整数数组。 字符串乐透由一定数量的 1 到 99 之间的数字组成,并且仅由 1 位和 2 位数字组成。 (例如:字符串乐透可能看起来像“1 34 5 23 7 89 32 4 10 3 6 5”。)

我试图通过将 String 转换为 char[],然后将 char[] 转换为 int[] 来解决问题。我将其转换为 char[] 的逻辑是可以为 int[] 格式化数字。

这是我目前所拥有的:

public static int[] conversion(String lotto)
{
    char[] c = lotto.toCharArray();
    int[] a = new int[c.length];
    for(int i = 0, j = 0; i < c.length; i++)
    {
        if(c[i] != ' ' && c[i+1] != ' ')
        {
            a[j] = c[i] + c[i+1];
            i+=2;
            j++;
        }
        else if(c[i] != ' ' && c[i+1] == ' ')
        {
            a[j] = c[i];
            i++;
            j++;
        }
    }
    return a;
}//end of conversion method

我仍在处理程序的其余部分,但我知道 c[i] + c[i+1] 返回一个 ASCII 值或不同的 int,而不是将两个字符组合在一起(我想要的示例:'3' + '4' = 34。)

我该如何解决这个问题?

【问题讨论】:

    标签: java arrays char data-conversion


    【解决方案1】:

    如果您不关心转换为字符数组,那么您可以使用 .split() 方法

        String[] nums = lotto.split(" ");
        int[] a = new int[nums.length];
        for(int i = 0; i < a.length; i++)
        {
            a[i] = Integer.parseInt(nums[i]);
        }
        return a;
    

    【讨论】:

      【解决方案2】:

      尝试使用String.split

      String numbers[]  = lotto.split (" ");
      

      【讨论】:

        【解决方案3】:

        使用字符串split 函数,您可以将字符串按空格分开,如下所示:

        string[] lottoArray = lotto.split(" ");
        

        然后,您可以遍历数组并将值放入一个 int 数组中:

        int[] numbersArray = new int[lottoArray.length];
        for (int i = 0; i < lottoArray.length; i++)
            numbersArray[i] = Integer.parseInt(lottoArray[i]);
        

        【讨论】:

          【解决方案4】:

          Java 1.8 的乐趣...一行:

          int[] nums = Pattern.compile("\\s")
             .splitAsStream("1 34 5 23 7 89 32 4 10 3 6 5")
             .mapToInt(Integer::valueOf)
             .toArray();
          

          想要对 int 数组进行排序吗?还是一行:

          int[] nums = Pattern.compile("\\s")
             .splitAsStream("1 34 5 23 7 89 32 4 10 3 6 5")
             .mapToInt(Integer::valueOf)
             .sorted()
             .toArray();
          

          【讨论】:

            【解决方案5】:

            我会这样做:

                public static int[] string2array(String s) {
                    return util1(s, 0, 0, false);
                }
            
                private static int[] util1(String s, int n, int l, boolean b) {
                    if (s.isEmpty()) {
                        return b ? util2(l, n, new int[l + 1]) : new int[l];
                    }
                    if (Character.isWhitespace(s.charAt(0))) {
                        return b ? util2(l, n, util1(s.substring(1), 0, l + 1, false)) : util1(s.substring(1), 0, l, false);
                    }
                    return util1(s.substring(1), n * 10 + Character.digit(s.charAt(0), 10), l, true);
                }
            
                private static int[] util2(int idx, int value, int[] array) {
                    array[idx] = value;
                    return array;
                }
            

            Arrays.toString(string2array("1 34 5 23 7 89 32 4 10 3 6 5")) 的结果是

            [1, 34, 5, 23, 7, 89, 32, 4, 10, 3, 6, 5]
            

            http://ideone.com/NCpOQc

            【讨论】:

              【解决方案6】:

              拆分包含数字的String

              String str = "1 2 33 64";
              String[] numbers = str.split(" ");
              

              创建一个与String[] 大小相同的int[]

              int[] array = new int[numbers.length];
              

              循环通过numbers,解析每个值并将其存储在int[]中:

              for(int i = 0; i < numbers.length; i++)
                  array[i] = Integer.parseInt(numbers[i]);
              

              【讨论】:

                猜你喜欢
                • 2012-11-20
                • 2012-05-28
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2018-12-18
                • 2017-02-19
                • 1970-01-01
                相关资源
                最近更新 更多