将带有空格和数字的String转换为仅带数字的int数组

时间:2014-10-30 00:45:23

标签: java arrays char data-conversion

我想将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。)

如何解决此问题?

6 个答案:

答案 0 :(得分:3)

如果您不关心转换为字符数组,那么您可以使用.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;

答案 1 :(得分:1)

尝试使用String.split

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

答案 2 :(得分:1)

使用字符串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]);

答案 3 :(得分:1)

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();

答案 4 :(得分:1)

我会这样做:

    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

答案 5 :(得分:0)

拆分包含数字的String

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

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

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

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

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