【问题标题】:Initialize String[] with empty strings用空字符串初始化 String[]
【发布时间】:2018-09-27 12:12:27
【问题描述】:

我想创建一个包含多个空字符串的字符串数组。

String[] array = {"", "", "", "", ""};

在 python 中,我们可以简单地使用此代码[""] * 5 来实现这一点。 java有类似的吗?

【问题讨论】:

  • 这段代码不工作吗?
  • @FarhanQasim 代码正在运行。但是如果我想用 100 个空字符串初始化一个数组,我不想手动编写它......

标签: java arrays string


【解决方案1】:

没有语法,没有。

在 API 级别,有 Arrays.fill,但遗憾的是它没有返回你传递给它的数组,所以你不能在初始化器中使用它,你必须在之后使用它:

String[] array = new String[5];
Arrays.fill(array, "");

当然,您总是可以使用自己的静态实用程序方法。

public static <T> T[] fill(T[] array, T value) {
    Arrays.fill(array, value);
    return array;
}

然后

String[] array = YourNiftyUtilities.fill(new String[5], "");

(显然,使用可变对象这样做可能会很狡猾,但使用 String 就可以了。)

【讨论】:

  • 感谢我正在寻找的东西。你能详细说明你的第二个陈述吗?为什么我不应该将它与可变对象一起使用?
  • @JohnyDoe:因为数组中的每个条目都将引用 same 对象。对于可变对象,这通常不是您想要的(尽管它肯定可以),因为您通常不希望array[0].property = value 意味着array[1].property 现在具有该值(因为array[0]array[1] 指的是同一个对象)。但是字符串是不可变的(带有反射的模不合理游戏),所以这里没有这样的问题。
【解决方案2】:

在 Java 8 中,您有一个不那么简洁但比重复文字更好的习语:

// will create a String[] with 42 blank Strings
String[] test = Stream
    // generate an infinite stream with a supplier for empty strings
    .generate(() -> "")
    // make the stream finite to a given size
    .limit(42)
    // convert to array with the given generator function to allocate the array
    .toArray(String[]::new);

【讨论】:

    【解决方案3】:

    您可以使用Arrays 类中的fill 方法。

    String[] test = new String[10];
    Arrays.fill(test, "");
    

    【讨论】:

    • 重复答案,现在?还有,是Arrays,不是吗?
    • @CodeFinity 修复了它。感谢您指出这一点。
    • ? 为了完整起见,导入是:import java.util.Arrays;
    【解决方案4】:

    最接近的应该是

    String[] array = new String[5];
    Arrays.fill(array, "");
    

    但是,它与 array 并不严格相同,首先使用 null 值初始化。

    【讨论】:

      【解决方案5】:

      你可以试试循环:

      String[] array = new String[5];
      for (int i = 0; i < 5; i++)
          array[i] = "";
      

      【讨论】:

      • 在两个不同的地方硬编码5 是个坏主意。
      • 更好地使用array.length
      【解决方案6】:

      另一种方法是使用IntStream.rangeClosed 生成所需数量的字符串。

      String[] result = IntStream.rangeClosed(1, 5)
                                 .mapToObj(i -> "")
                                 .toArray(String[]::new);
      

      【讨论】:

        猜你喜欢
        • 2016-07-27
        • 1970-01-01
        • 1970-01-01
        • 2012-01-07
        • 1970-01-01
        • 2012-07-18
        • 1970-01-01
        • 2021-05-25
        • 2011-03-09
        相关资源
        最近更新 更多