前提・実現したいこと
ローマ字(仏語)の文章を単語に区切るプログラムを作成中、以下のエラーメッセージが発生しました。
発生している問題・エラーメッセージ
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space at java.base/java.lang.StringLatin1.newString(StringLatin1.java:764) at java.base/java.lang.String.substring(String.java:1908) at structuredonnées/langueIdentifier.Test.main(Test.java:33)
該当のソースコード
Java
1 2package langueIdentifier; 3 4import java.io.BufferedReader; 5import java.io.IOException; 6import java.nio.charset.Charset; 7import java.nio.file.Files; 8import java.nio.file.Path; 9import java.nio.file.Paths; 10import java.text.BreakIterator; 11import java.util.ArrayList; 12 13public class Test { 14 15private String textFile; 16 17public Test (String textFile) { 18 19this.textFile = textFile; 20 } 21 22public static void main(String[] args) { 23Path p1 = Paths.get("path"); 24Charset charset = Charset.forName("UTF-8"); 25ArrayList<String> mots = new ArrayList<String>(); 26 27try (BufferedReader reader = Files.newBufferedReader(p1, charset)){ 28String line = reader.readLine(); 29BreakIterator wb = BreakIterator.getWordInstance(); 30 31while (line != null) { 32wb.setText(line); 33int lastIndex = wb.first(); 34while (BreakIterator.DONE != lastIndex) { 35int firstIndex = lastIndex; 36lastIndex = wb.next(); 37if (lastIndex != wb.DONE && Character.isLetterOrDigit(line.charAt(firstIndex))) { 38String mot = line.substring(firstIndex, lastIndex).toLowerCase(); 39mots.add(mot); 40} 41 42} 43 44} 45} catch (IOException ioe) { 46 47System.out.println(ioe.toString()); 48} 49for (String mot : mots) { 50 51System.out.println(mot); 52} 53} 54} 55
試したこと
ネットでも調べてみましたがよくわかりませんでした。問題のテキストファイルは大したサイズのファイルでもなく、もう少し重いテキストファイルを読み込む他のプログラムは正常に作動しているので、不可解です。
よろしくお願いします。
回答1件
あなたの回答
tips
プレビュー