字符串类型未定义join(String,List <String>)方法。

3

我正在学习Java,看到一个关于哈希映射的教程,开始像我的导师一样输入相同的代码。问题是当我遇到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);
}

但是我看过的视频里他们是怎么做到的呢? 我写了和他们一模一样的代码,但是他们没有出错而我却出错了。 - taga
@NicholasK 是的,可以。 https://docs.oracle.com/javase/8/docs/api/java/lang/String.html#join-java.lang.CharSequence-java.lang.Iterable- - Jacob G.
6
楼主,你可能没有使用 Java 8 或以上的版本进行编译。 - Jacob G.
你能检查一下你的Java版本吗?它很可能比1.8之前的版本要旧。 - Pushpesh Kumar Rajwanshi
1
从Java 8开始,join有一个重载函数,它接受任何实现了Iterable<? extends CharSequence>的内容,这将包括List<String>。@GauravRai1512 - Powerlord
我认为我的Java版本不好。 - taga
3个回答

4
当你查看 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。

1
在命令提示符中输入“javac -version”可以告诉您Java编译器的版本。 - Powerlord

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类的优势。
更多信息可以在文档中找到。

0

错误信息告诉您类型String没有带有签名join(String, List<String>)的方法。由于Java 8中的String确实具有methodString.join(CharSequence, Iterable<CharSequence>),它将匹配(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”即可。

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接