输出字符串的数字时得到一个额外的数字

Getting an additional number when outputting numbers of a String

我有一个相当简单的问题,但我对为什么会这样感到困惑:下面的代码块是一种方法,该方法 returns 一个最初有数字 and/or 的数字字符串特殊的角色。这里:

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

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

在你的代码中循环

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 循环之外):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);

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

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

数组从 0 开始计数。

所以对于 5 位数组,索引是 0 1 2 3 4。

你看 4 已经是 i < nums.length。将其设置为 nums.length - 1,以省略结尾的冒号。