【问题标题】:Getting all the values of an array of Strings in one String在一个字符串中获取字符串数组的所有值
【发布时间】:2009-10-10 21:13:14
【问题描述】:

如果有的话

String[] s = new String[3];
s[0] = "Ap";
s[1] = "p";
s[2] = "le";

String result = ?

如果我想在不循环的情况下让 Apple 退出 s,我该怎么做?

有什么捷径吗?

【问题讨论】:

    标签: java arrays string


    【解决方案1】:

    如果不循环对您来说比阻止导入另一个库更重要,或者如果您已经在使用apache commons lang,无论如何,您可以使用 StringUtils.join 方法

    import org.apache.commons.lang.StringUtils;
    String joined = StringUtils.join(s, "");
    

    也许 Apache Commons 也有其他可能对您的项目感兴趣的方法。我发现它们是原生 Java 库中缺少的功能的非常有用的资源。

    【讨论】:

    • 这不是在其实现中循环吗?
    • 显然会有一个循环某处!
    • 是的,它确实在源代码kickjava.com/src/org/apache/commons/lang/StringUtils.java.htm 中进行了检查。但主要是我只想强调使用库的想法。如果这是您将使用的唯一功能,那么导入整个 jar 是没有意义的。
    • 我还检查了源代码,发现它使用了 StringBuffer。使用 StringBuilder 将使其更快。但这是一个很好的答案。它指出“如果您需要某些东西,请检查 java 库,如果它不在那里,它必须在 apache commons 中”:)
    【解决方案2】:

    不用循环,你可以:

    public String joinpart(String[] a, int i, String prefix) {
        if (i < a.length) {
            return joinpart(a, i + 1, prefix + a[i]);
        }
        return prefix;
    }
    

    然后:

    String[] a = new String[]{"Ap", "p", "le"};
    String apple = joinpart(a, 0, "");
    

    这称为递归解决方案。

    【讨论】:

    • 结果字符串的大小也是二次方。您应该在joinpart 中使用StringBuilder 来构造字符串。
    • 我认为这对于这个特定的学习练习来说并不重要,所以我不想让实现变得复杂。这会掩盖解决方案的本质,而这正是这里重要的。
    • 很好的解决方案。使用字符串生成器怎么样?我们可以指定容量并在 for 循环中追加,而不是使用递归。我问这个是因为我认为更大尺寸的数组会更快。我错了吗?
    • @jcasso:这个问题要求“不循环”的解决方案。我在上面的评论中提到了 StringBuilder 的使用。
    【解决方案3】:

    如果您知道数组的长度,您可以轻松地执行以下操作:

    String result = s[0] + s[1] +s[2];
    

    另一种选择是执行以下操作,(这纯粹是学术性的,我不会在实际场景中使用它,因为它会从您的字符串中删除 []&lt;space&gt;):

    String result = Arrays.toString(s).replaceAll("[\\]\\[, ]", "");
    

    另一种选择,与第一次尝试一起使用,但使用类似 C 的格式化程序:

    System.out.println(String.format("%s%s%s", s));
    

    【讨论】:

    • 如果长度是100?你需要一个循环。
    【解决方案4】:

    使用Dollar 很简单:

    String[] array = new String[] { "Ap", "p", "le" };
    String result = $(array).join(); // result now is "Apple"
    

    【讨论】:

    • 但问题是关于 Java,而不是 Javascript。
    【解决方案5】:
    String result = s[0] + s[1] + s[2];
    

    如果您有未知数量的条目,我认为您需要一个循环。

    【讨论】:

    • 我想他只是举了一个例子。如果数组在方法中传递呢?
    • 好吧,数组知道它有多大(无论如何在 Java 中),然后你就可以循环了。否则,运气不好。
    【解决方案6】:

    Java 没有String.join() 类型的方法。如果你想隐藏循环,你必须自己滚动一个。

    【讨论】:

      猜你喜欢
      • 2015-08-21
      • 1970-01-01
      • 1970-01-01
      • 2015-12-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-07
      • 1970-01-01
      相关资源
      最近更新 更多