未为类型String

时间:2018-10-27 18:08:12

标签: java string

我正在学习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);
}

3 个答案:

答案 0 :(得分:3)

当您使用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 :(得分: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

中找到更多信息

答案 2 :(得分:0)

该错误消息告诉您类型String没有带有签名join(String, List<String>)的方法。由于Java 8中的String具有method String.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

检查您的版本。

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

如果您只需要更新,搜索“下载Java 8”将使您到达那里。

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