Студент по сетевым технологиям / программированию здесь пытается выполнить задание, и я наткнулся на загадку. Перед нами стоит чтение в текстовом файле, размещение слов в ArrayList и выполнение строковых операций с содержимым. Я могу вытащить слова в ArrayList, отсортировать содержимое в порядке возрастания, удалить любые слова длиной менее четырех символов, удалить повторяющиеся записи и удалить цифры. Однако я обнаружил, что слова с апострофами «обрезаются». Такие слова, как «не будет» и «не может», помещаются в мой ArrayList как «быт» и «не может».
Я пробовал разные разделители для моего объекта сканера, но я не могу найти тот, который будет хранить апострофы в словах и не будет обрезать слово после апострофа.
import java.io.File;
import java.io.FileNotFoundException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.LinkedHashSet;
import java.util.Scanner;
public class textFile {
public static void main(String[] args) throws FileNotFoundException {
// Scanner object reads in the required text file to the "words" ArrayList.
Scanner sc = new Scanner(new File("textfile.txt"), "UTF-8");
ArrayList<String> words = new ArrayList<String>();
while (sc.hasNext()) {
sc.useDelimiter("[^A-Za-z]");
words.add(sc.next().toLowerCase());
}
// Closes the Scanner object used just above.
sc.close();
// Sorts the "words" ArrayList in ascending order.
Collections.sort(words);
// Creates the "wordsNoDuplicates" ArrayList. Removes duplicate strings.
LinkedHashSet<String> wordsNoDup = new LinkedHashSet<String>(words);
// Removes all words containing less than four characters.
wordsNoDup.removeIf(u -> u.length() < 4);
// Prints the total number of words in the "wordsNoDup" ArrayList
System.out.println("Total Number of Words: " + wordsNoDup.size() + "\n");
// Calculate and print the average word length.
// double avgWordLength = 21186 / wordsNoDup.size();
System.out.println("Average Word Length: " + 7.0 + "\n");
// Print out the "words" ArrayList. Intended for debugging.
System.out.print(wordsNoDup);
System.out.println();
}
}
Опять же, такие слова, как «не может», «не должен» и «не будет», вводятся как «cann», «mustn» и «willn». Похоже на апостроф и все, что после него отбрасывается. Я открыто признаю, что я не обладаю глубокими знаниями Java или программирования, но любая помощь будет принята с благодарностью!