Я только запускаю нам Гуаву вместо Наборов Google. Класс Разделителя казался прохладным. Но когда я использую его, как это:
private static final Pattern p = Pattern.compile(" +");
private static final Splitter usSplitter = Splitter.on(p).trimResults();
Я получаю дамп стека:
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:662)
at com.google.common.base.CharMatcher.<clinit>(CharMatcher.java:69)
at com.google.common.base.Splitter.<init>(Splitter.java:99)
at com.google.common.base.Splitter.on(Splitter.java:208)
javadocs ничего не имеют об этом "com.google.common.base. Платформа". таким образом, немного трудно предположить то, что идет не так, как надо.
Как Вы видите, Шаблон очень прост.
Какую версию Guava вы используете? У меня это прекрасно работает с r05.
Edit: Похоже, что проблема заключается в том, что у вас есть и google-collections, и guava в вашем runtime classpath. Platform
(внутренний класс) существовал в google-collections, но не имел метода precomputedCharMatcher
. Splitter
правильно загружается из банка guava, но Platform
загружается из банка google-collect.
java.lang.NoSuchMethodError
сообщает вам, что нужный метод отсутствует в текущем пути к классам среды выполнения , когда он был в путь к классам во время компиляции .
Другими словами, чтобы решить эту проблему, вам необходимо выровнять путь к классам среды выполнения, чтобы иметь правильную версию API, которую вы использовали во время компиляции. Это также может быть вызвано смешиванием разных версий библиотеки в пути к классам среды выполнения. Затем очистите путь к классам.