Java 11を真面目に使い始めて遭遇したのだが、Java 8まではDateFormat#getDateTimeInstanceで”M/d/yy h:mm a”のDateFormatが返ってきたけど、Java 9からは”M/d/yy, h:mm a”という感じで微妙にカンマが入る。ということで、今までどおりにパースはできない…。
JDK-8152154を見ると、-Djava.locale.providers=COMPAT,CLDR JI9032375 というオプションで前のも使えるらしい。
Challange IT For Future
Java 11を真面目に使い始めて遭遇したのだが、Java 8まではDateFormat#getDateTimeInstanceで”M/d/yy h:mm a”のDateFormatが返ってきたけど、Java 9からは”M/d/yy, h:mm a”という感じで微妙にカンマが入る。ということで、今までどおりにパースはできない…。
JDK-8152154を見ると、-Djava.locale.providers=COMPAT,CLDR JI9032375 というオプションで前のも使えるらしい。
Java 11を使ってmvn javadoc:javadocとしたときに
[ERROR] Exit code: 1 - javadoc: error - The code being documented uses modules but the packages defined in https://docs.oracle.com/javase/8/docs/api/ are in the unnamed module.
とか
[ERROR] Exit code: 1 - javadoc: エラー - ドキュメント化しようとしているコードではモジュールが使用されていますが、https://docs.oracle.com/javase/8/docs/api/で定義されているパッケージは名前のないモジュールのものです。
のようなエラーが出るときには、JavaDocの参照するJavaのソースコードのバージョンの問題なので、pom.xmlのjavadocプラグインで、sourceを次のようにして押しておく
<plugin>
<artifactId>maven-javadoc-plugin</artifactId>
<version>3.0.1</version>
<configuration>
<encoding>UTF-8</encoding>
<docencoding>UTF-8</docencoding>
<charset>UTF-8</charset>
<source>8</source>
</configuration>
</plugin>
Tikaには文字列を渡すと、その言語を渡してくれる機能がある。使うためにはまずpom.xmlに以下の依存関係を追加する。
<dependency>
<groupId>org.apache.tika</groupId>
<artifactId>tika-langdetect</artifactId>
<version>1.20</version>
</dependency>
あとは、LanguageDetectorを生成して利用する。
import java.io.IOException;
import org.apache.tika.langdetect.OptimaizeLangDetector;
import org.apache.tika.language.detect.LanguageDetector;
import org.apache.tika.language.detect.LanguageResult;
public class LanguageDetectorExample {
public String detectLanguage(String text) throws IOException {
LanguageDetector detector = new OptimaizeLangDetector().loadModels();
LanguageResult result = detector.detect(text);
return result.getLanguage();
}
}
上記はTikaにあるexampleコードだが、OptimaizeLangDetectorをnewして、loadModels()でLanguageDetectorを取得する。あとはLanguageDetectorに言語判定したいテキストを渡せば言語情報が返ってくる。
まぁ、とはいえ、そこそこ判定が外れる気もする…。