【问题标题】:The method join (String, List<String>) is undefined for the type String [closed]未定义 String 类型的方法 join (String, List<String>) [关闭]
【发布时间】:2018-10-27 18:08:11
【问题描述】:

我正在学习 Java,并且遇到了一个关于 Hash Maps 的教程,并开始像我的导师一样输入相同的代码。问题是当我遇到 String.join 方法时,我得到了一个错误,而我的导师没有,我不知道为什么。

这是错误:

The method join(String, List<String>) is undefined for the 
type String

你能告诉我有什么问题吗?

private String getZnanjaList(){

    List <String> listaZnanja = new ArrayList<>();

    for (String znanje : this.znanja.keySet()){
        listaZnanja.add(znanje + ": " + this.znanja.get(znanje));
    }

    return String.join("; ", listaZnanja);
}

【问题讨论】:

  • 但是他们怎么能在我看过的视频中做到这一点呢?我编写了与他们完全相同的代码,但他们没有收到错误,而我做到了
  • @NicholasK 是的,你可以。 docs.oracle.com/javase/8/docs/api/java/lang/…
  • OP,您可能没有使用 Java 8 或更高版本进行编译。
  • 你能检查你的java版本吗?它最像 1.8 之前的版本
  • @GauravRai1512 从 Java 8 开始,join 有一个重载,它接受任何实现 Iterable&lt;? extends CharSequence&gt; 的内容,其中包括 List&lt;String&gt;

标签: java string


【解决方案1】:

当您查看 String.join() 的 javadoc 时,您会发现:

public static String join(CharSequence delimiter,
                          Iterable<? extends CharSequence> elements)
Returns a new String composed of copies of the CharSequence elements joined together with a copy of the specified delimiter.
...
Since:
1.8

仅此而已:您必须使用旧版本的 Java。

所以:您应该检查系统上可用的 JDK 版本(分别在您调用 javac 时使用,或者您的 IDE 指向的版本),或者限制自己使用该版本,或者(推荐)直接跳转到 Java 8 或 Java 11。

【讨论】:

  • javac -version 在命令提示符下应该会告诉您 Java 编译器的版本。
【解决方案2】:

正如其他人提到的,String 功能出现在 Java 8 及更高版本中。

如果您打算坚持使用 Java 7,可以使用以下解决方案:

private String getZnanjaList(){
    List <String> listaZnanja = new ArrayList<>();
    /*Map<String, String> znanja = new HashMap<>();
    znanja.put("fruit", "apple");
    znanja.put("animal", "dog");
    znanja.put("vehicle", "ford");*/

    for (String znanje : znanja.keySet()){
        listaZnanja.add(znanje + ": " + znanja.get(znanje));
    }

    StringBuilder sb = new StringBuilder();
    for(String s : listaZnanja) {
      sb.append(";").append(s);
    }
    return sb.deleteCharAt(0).toString();
}

在这种方法中,我们利用了StringBuilder 类。
您可以在doc找到更多信息

【讨论】:

    【解决方案3】:

    错误消息告诉您String 类型没有签名join(String, List&lt;String&gt;) 的方法。由于 Java 8 中的 String 确实具有匹配的 method String.join(CharSequence, Iterable&lt;CharSequence&gt;)StringCharSequence 的一种类型,ListIterable 的一种类型),这意味着你不是使用 Java 8 或更新版本。

    可能的解决方案:

    1. 将您的 JRE 或 JDK 更新到 Java 8 或更高版本。
    2. 进行更改,使您的代码使用您机器上已经存在的 Java 8 或更高版本的 JRE 或 JDK。
    3. 更改代码,使其不依赖于 Java 8 功能。

    更新到 Java 8 或更高版本是显而易见的选择。请注意您使用的是该 JRE/JDK 而不是另一个。例如,Microsoft 经常将路径设置为指向其可能较旧的 JRE。

    在命令提示符下,您可以运行

    java -version
    

    检查您的版本。

    互联网上已经有许多站点可以帮助您将 Java 指向正确的 JDK 或 JRE。例如。 this answer。如果您仍然遇到问题,您可能需要发布一个新问题,其中包含您的 %PATH%%JAVA_HOME% 变量(我假设是 Windows)以及您想要使用的 JRE/JDK 的位置。

    如果您只需要更新,搜索“下载 Java 8”应该可以到达那里。

    This answer 解释了如何手动执行此操作。同一问题的其他答案建议有用的库。但实际上,更新为使用 Java 8 可能会更好。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-01-10
      • 1970-01-01
      • 1970-01-01
      • 2015-07-30
      • 1970-01-01
      • 2012-09-19
      • 1970-01-01
      相关资源
      最近更新 更多