【问题标题】:How do I prefix a String to each element in an array of Strings?如何为字符串数组中的每个元素添加一个字符串前缀?
【发布时间】:2011-09-12 14:20:12
【问题描述】:

我想知道在 Java 中是否有一个函数可以将定义的字符串前缀到字符串数组的每个字符串的开头。

例如,

my_function({"apple", "orange", "ant"}, "eat an ")  would return {"eat an apple", "eat an orange", "eat an ant"}

目前,我编写了这个函数,但我想知道它是否已经存在。

【问题讨论】:

  • 不要以为标准sdk中存在这样的功能。
  • 这个问题似乎不成熟。上面的代码示例不是完整的 Java 代码,“存在”是什么意思?如果它是 Java SE 的一部分,您可以通过检查 java.util 包轻松找到。我很难想象有人会在一个严肃的、已发布的 Java 库中实现这一点,因为这个噱头不属于库。此外,方法声明 public String[] myFunction(String prefix,String... items) 可能更实用。

标签: java arrays string append


【解决方案1】:

不。由于它应该是一个三行函数,因此您最好还是坚持使用您编写的那个。

更新

使用 Java 8,语法很简单,我什至不确定是否值得为以下对象创建函数:

List<String> eatFoods = foodNames.stream()
    .map(s -> "eat an " + s)
    .collect(Collectors.toList());

【讨论】:

    【解决方案2】:

    java 库中不存在这样的东西。这不是 Lisp,所以数组不是列表,而且还没有为您提供一堆面向列表的函数。这部分是由于 Java 的类型系统,这使得为所有可以以面向列表的方式使用的不同类型提供如此多的类似函数是不切实际的。

    public String[] prepend(String[] input, String prepend) {
       String[] output = new String[input.length];
       for (int index = 0; index < input.length; index++) {
          output[index] = "" + prepend + input[index];
       }
       return output;
    }
    

    可以处理数组,但也有 List 接口,其中包括可调整大小的 ArrayLists、Vectors、Iterations、LinkedLists 等等.

    由于面向对象编程的特殊性,这些不同的实现中的每一个都必须实现“prepend(...)”,这将对任何关心实现任何类型的列表的人造成沉重的负担。在 Lisp 中,情况并非如此,因为函数可以独立于对象存储。

    【讨论】:

      【解决方案3】:

      诸如...之类的东西怎么样?

      public static String[] appendTo(String toAppend, String... appendees) {
          for(int i=0;i<appendees.length;i++)
              appendees[i] = toAppend + appendees[i];
          return appendees;
      }
      
      String[] eating = appendTo("eat an ", "apple", "orange", "ant")
      

      【讨论】:

      • 您的函数看起来像是返回了一个新数组,但实际上它修改了旧数组。一般来说,@StriplingWarrior 的解决方案是首选。
      【解决方案4】:

      您可以使用带有.concat() 方法引用的流

          List<String> eatingFoods = foods.stream()
              .map("eat an "::concat)
              .collect(Collectors.toList());
      

      【讨论】:

        猜你喜欢
        • 2021-08-02
        • 1970-01-01
        • 2013-11-30
        • 2017-03-12
        • 2018-07-12
        • 2011-01-07
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多