使用com.google.common.base.Splitter时出现NoSuchMethodErrorexception

我正在尝试使用com.google.common.base.Splitter,如下所示

Iterable segs = Splitter.on("/").split("one/two/three/four/five"); for (String seg : segs) { System.out.println(seg); } 

但是,我看到以下exception:

 Exception in thread "main" java.lang.NoSuchMethodError: com.google.common.base.Platform.precomputeCharMatcher(Lcom/google/common/base/CharMatcher;)Lcom/google/common/base/CharMatcher; at com.google.common.base.CharMatcher.precomputed(CharMatcher.java:664) at com.google.common.base.CharMatcher.(CharMatcher.java:71) at com.google.common.base.Splitter.(Splitter.java:107) at com.google.common.base.Splitter.on(Splitter.java:171) at Test.main(Test.java:30) 

有谁知道我在这里做错了什么?

我遇到了同样的问题。 事实certificate我使用了旧版番石榴。 访问此网站: https : //code.google.com/p/guava-libraries/ ,并下载更新版本。

顺便说一下,google-collections被重命名为Guava。

使用以下依赖项来解决问题

要使用Maven添加对Guava的依赖关系,请使用以下命令:

  com.google.guava guava 19.0  

要使用Gradle添加依赖项:

 dependencies { compile 'com.google.guava:guava:19.0' } 

您的问题是另一个库可能还包含一个guava库,它首先从您的类路径而不是您想要的版本加载。 这会导致此运行时exception。

发生这种情况的另一个原因是如果在Guava库之前导入GSON库。

请参阅: https : //github.com/google/guava/issues/2786

我将jar从一个文件夹导入IntelliJ。 最终工作的是在gson旁边添加一个“z”(因此jar将命名为zgson),以便Guava首先导入。

对我来说,当你有一个依赖于早期版本的Guava的依赖项时会发生这种情况,并且首先列出了这个依赖项。 番石榴将在首先被发现的地方解决,而忽略其余部分。

修复是首先添加对guava的依赖,但要注意它不会破坏使用guava的其他项目

有两个版本:1)com.google.guava:guava:26.0-android 2)com.google.guava:guava:26.0-jre。 最有可能的是,你在我的案例中分配了错误的版本

是的,这只是番石榴库的问题。 保留更新的库并删除所有剩余的番石榴版本(如果有的话)并尝试。 应该工作正常。