基于Java中的字符串创建整数数组

时间:2012-12-11 01:10:16

标签: java arrays string integer

对于我的compsci赋值,我们应该在其中使用整数和字母给我们一个字符串,然后创建一个方法来获取该字符串并将其转换为整数数组,其中包含整数。由于某种原因,我的方法不是向数组添加int,我不确定原因。

对于字符串中给出的LETTERS,我们应该丢弃它们,所以我们有一个只有int值的数组;恩。输入:abs3131afas312数组将具有{3131,312}

这是link to the assignment

这是我的方法:

public static int[] intParse(String a){
    int[] array1 = new int[a.length()];
    int b = 0;
    for(int i = 0; i < a.length(); ++i)
    {
        int g = a.charAt(i);

        if(g == 1 || g == 2 || g == 3 || g == 4 || g == 5 || g == 6 || g == 7 || g == 8 || g == 9 || g == 0)
        {

            String c;
            for(int j = i; j < a.length(); ++j)
            {
                int k = a.charAt(j);
                if(k != 1 && k != 2 && k != 3 && k != 4 && k != 5 && k != 6 && k != 7 && k != 8 && k != 9 && k != 0)
                {
                    c = a.substring(j,k-1);
                    array1[b] += Integer.parseInt(c);
                    b++;
                    j = (a.length());
                    i = a.charAt(j);

                }
                else
                {
                    c = a.substring(j,a.length());
                    array1[b] = Integer.parseInt(c);
                    j = a.length();
                }
            }

        }


    }

        return array1;
}

4 个答案:

答案 0 :(得分:2)

不是将字符与整数进行比较并使用Integer.parseInt,而应使用以下非常有用的实用方法:

Character.isDigit(int codepoint)
Character.getNumericValue(int codepoint)

另外,你的逻辑似乎有点粗略。当k是数字代码点时,您正在尝试解析字符串的其余部分。这似乎与您尝试使用外循环的内容保持一致。

答案 1 :(得分:0)

为您解决的问题:

char g = a.charAt(i);
if(g == '1' || g == '2' || g == '3' || g == '4' || g == '5' || g == '6' || g == '7' || g == '8' || g == '9' || g == '0') {

或更好:

char g = a.charAt(i);
if(g >= '0' && g <= '9') {

您的其他if也需要修复

char k = a.charAt(j);
if(k < '0' || k > '9') {

答案 2 :(得分:0)

首先,a是一个字符串,包含ASCII字符而不是整数。字符'1'不等于整数1.它等于'{1'的ASCII值恰好是49。

所以你要做的第一件事就是把那个长期的条件改为:

char c = a.charAt(i);
if (c >= '0' && c <='9')
{
   ...
}

你应该做的是保留一个字符串(每次遇到一个非数字字符,然后是一个数字字符时,新的字符串,并继续附加c,直到你找到的字符是非数字。

然后您只需执行Integer.parseInt(yourString)即可获得整数。

答案 3 :(得分:0)

您可能更喜欢这种方法:

      Scanner sc = new Scanner("abs3131afas312");
      String match;
      while ((match = sc.findInLine("(\\d+)"))!=null) {
              // instead of printing it, put it in your array
              // or a list (and then convert to array)
              System.out.println(Integer.parseInt(match));
      }         
      sc.close();

输出:

3131
312