【问题标题】:Create long[] Array with Stringbuilder使用 Stringbuilder 创建 long[] 数组
【发布时间】:2017-12-17 17:19:01
【问题描述】:

我想用 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;

    }

我该如何解决这个问题? 谢谢你的回答

【问题讨论】:

  • 为什么你认为你的语法会起作用?您正在创建一个包含单个项目的数组,并且该项目来自解析一个长且不正确的字符串,这会导致异常。使用列表而不是字符串生成器。
  • 为什么要使用一种专为操纵文本而设计的类型来构建数字数组?你想在这里完成什么?为什么不使用long[] array = new long[numbercount]; 然后循环填充它? (或numbercount * 2,如果您希望每个value 值之间的值为100。)

标签: java arrays string long-integer stringbuilder


【解决方案1】:

你知道数组中有多少元素:两倍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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

      使用StringBuilder 看起来很漫长。使用Stream 会简单得多:

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

      【讨论】:

      • 或者如果 OP 对此不满意,只需构建数组并使用 for 循环填充它就会非常非常简单。
      • 我很惊讶没有获得来自@JonSkeet 的评论的 Winter Bash 帽子 :-)
      • 还有,单线 FTW!
      【解决方案4】:

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

      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;
      }
      

      【讨论】:

      • 这很好用,因为每个其他值之间应该有一个 100。因此数量增加了一倍
      猜你喜欢
      • 2010-10-23
      • 2011-01-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多