我正在学习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);
}
答案 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>)
可以匹配(String
是CharSequence
的类型,而List
是Iterable
),这意味着您未使用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可能更好。