使用com.google.common.base.Splitter时出现NoSuchMethodError异常

mip*_*mip 22 java splitter guava

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

Iterable<String> segs = Splitter.on("/").split("one/two/three/four/five");

for (String seg : segs) {
  System.out.println(seg);
}
Run Code Online (Sandbox Code Playgroud)

但是,我看到以下异常:

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.<clinit>(CharMatcher.java:71)
    at com.google.common.base.Splitter.<init>(Splitter.java:107)
    at com.google.common.base.Splitter.on(Splitter.java:171)
    at Test.main(Test.java:30)
Run Code Online (Sandbox Code Playgroud)

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

小智 10

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

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


Ind*_*our 8

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

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

<dependency>
  <groupId>com.google.guava</groupId>
  <artifactId>guava</artifactId>
  <version>19.0</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)

要使用Gradle添加依赖项:

dependencies {
  compile 'com.google.guava:guava:19.0'
}
Run Code Online (Sandbox Code Playgroud)


小智 2

您的问题是另一个库可能也包含番石榴库,并且首先从您的类路径而不是您想要的版本加载它。这将导致此运行时异常。