-1

对于我的 compsci 分配,我们应该接受一个给我们的字符串,其中包含整数和字母,然后创建一个方法来获取该字符串并将其转换为包含整数的整数数组。出于某种原因,我的方法没有将整数添加到数组中,我不确定为什么。

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

这是作业的链接

这是我的方法:

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

4 回答 4

2

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

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

另外,你的逻辑似乎有点粗略。当k是一个数字代码点时,您正试图解析整个字符串的其余部分。这似乎与您尝试对外部循环执行的操作不一致。

于 2012-12-11T01:17:37.323 回答
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') {
于 2012-12-11T01:16:38.360 回答
0

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

因此,您应该做的第一件事是将 long if 条件更改为:

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

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

然后,您可以简单Integer.parseInt(yourString)地获取整数中的数字。

于 2012-12-11T01:19:32.730 回答
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
于 2012-12-11T02:05:04.000 回答