使用 Stringbuilder 创建 long[] 数组

Create long[] Array with Stringbuilder

我想用 Stringbuilder 创建一个 long[] 数组,但是使用这段代码我得到了 "java.lang.NumberFormatException:"

protected long[] getpattern(int numbercount, int value) {
        StringBuilder longstringbuilder = new StringBuilder();

        while(numbercount > 0) {
            longstringbuilder.append("100, ");
            longstringbuilder.append(value + ", ");
            numbercount--;
        }
            longstringbuilder.append("100");

        String longstring = longstringbuilder.toString();

            long[] pattern = new long[] {Long.parseLong(longstring)};




        return pattern;

    }

我该如何解决? 感谢您的回答

您的 'longstringbuilder' 引用只包含一个包含数字、逗号和空格的字符串。您可以解析一个 %100 数字的字符串,但在您的情况下,您也有逗号和空格。

有几种解决方法,例如,您可以拆分字符串:String[] stringArray = longstringbuilder.split(", ");,然后您可以解析 stringArray 的每个项目,因为它只包含数值。

使用 StringBuilder 看起来很长的路要走。使用 Stream 会简单得多:

protected long[] getpattern(int numbercount, int value) {
    return IntStream.range(0, numbercount).mapToLong(i -> value).toArray();
}

您需要去掉字符串中的逗号和空格。我在这个例子中使用 trim,但你可能只是拆分为“,”。

protected long[] getpattern(int numbercount, int value) {
    StringBuilder longstringbuilder = new StringBuilder();

    while(numbercount > 0) {
        longstringbuilder.append("100, ");
        longstringbuilder.append(value + ", ");
        numbercount--;
    }
    longstringbuilder.append("100");

    String longstring = longstringbuilder.toString();
    String[] tokens = longstring.split(",");
    long[] pattern = new long[tokens.length];

    for (int i = 0; i < tokens.length; i++) {
        pattern[i] = Long.parseLong(tokens[i].trim());
    }

    return pattern;
}

你知道数组中将有多少个元素:两倍 numbercount,加上 1。所以只需构建该数组:

long[] values = new long[2*numbercount+1];
for (int a = 0; a < numbercount; ++a) {
  values[2*a+0] = 100;
  values[2*a+1] = value;
}
values[values.length-1] = 100;

完全没有必要涉及StringBuilder