输出字符串数时获取附加数字

时间:2018-02-10 00:47:36

标签: java arrays println

我有一个相当简单的问题,但我很困惑为什么会发生这种情况:下面的代码块是一个返回最初有数字和/或特殊字符的数字字符串的方法。这里:

public static int[] toNumArray (String string) {
    int[] x = new int[countNums(string)];
     int j = 0;
    for (int i = 0; i < string.length(); i++) {
        if (Character.isDigit(string.charAt(i))) {
            //System.out.println(string.charAt(i));
            x[j] = Character.digit(string.charAt(i), 10);
            j++;
        }

    }

    return x;
}

现在,我知道这种方法实际上是在做它的工作。我遇到的问题是在调用打印方法时输出结果,即:

public static void printArray(int[] nums) {
  for( int i = 0; i < nums.length; ++i ) {
     System.out.print( nums[i] + ", ");

  }
  int last = nums.length - 1;
  System.out.println( nums[last] );
    System.out.println();
}

当我在Main中调用这些方法时,我得到一个额外的数字,它总是最后一个数字。这里:

    String s = "12345abc";
    printArray(toNumArray(s));

我得到了

1,2,3,4,5, 5

为什么会这样?我本身成功通过了所有测试用例,但这显然不对。

3 个答案:

答案 0 :(得分:0)

在循环中的代码中

for( int i = 0; i < nums.length; ++i ) {
    System.out.print( nums[i] + ", ");
}

您将打印阵列中的所有数字(从1到5)

当您通过此循环退出时,您将拥有以下行:

int last = nums.length - 1;
System.out.println( nums[last] );

在这里,您将打印阵列的最后一个元素(编号5),但您已在for循环中使用了打印,因此您可以保持在同一行。

所以你有:

1, 2, 3, 4, 5, 5

通过这种方式:通过循环1, 2, 3, 4, 5,

到最后一个println(for for循环):5

编辑评论后:

要删除您可以解析的最后一个逗号,请执行以下操作:

在for循环中,您必须使用如下定义的变量:

String res = "";
for( int i = 0; i < nums.length; ++i ) {
    res += nums[i] + ", ";
}

出于for循环:

res = res.substring(0, res.length - 1);
System.out.println(res);

答案 1 :(得分:0)

以下是printArray(int[] nums)方法中的代码,它再次打印最后一位数字:

int last = nums.length - 1;
System.out.println( nums[last] );
System.out.println();

答案 2 :(得分:0)

数组从0开始计算。

因此,对于5位数组,索引为0 1 2 3 4.

你看到4已经是我&lt; nums.length。将其设置为nums.length - 1,以省略尾随冒号。