Используя следующие тестовые данные, которые вы можете просто скопировать и вставить в текстовый файл и использовать его как образец файла
"DSRD","KJHT","BFXXX","OUYTP"
"ABCD","XSHTKK","RTZI","HKLOPQ"
"BGTSZ","ASY","LOMCV","DESRAW"
"VMWEE","ERTZU","GSDFX","BHGFD"
"CD","FRTZU","JUHL","RETZ"
Должно работать что-то вроде ниже. Я надеюсь, что названия методов говорят сами за себя и понятно, что происходит на каждом этапе. Я включил несколько операторов println в качестве небольшой помощи по отладке. Вам следует удалить их, если вы работаете с исходными файлами, которые могут быть очень большими.
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
public class Example {
public static void main(String args[]) throws IOException {
String filePath = null;
if (args[0] == null || args[0].isEmpty()) {
System.out.println("Please Enter the Names File Path Enclosed in Double Quotes");
}
else {
filePath = args[0];
}
List<String> allLines = readAllLinesFromFile(filePath);
allLines.forEach(System.out::println);
System.out.println("**********************");
List<String> listWithoutQuotes = removeQuotes(allLines);
listWithoutQuotes.forEach(System.out::println);
System.out.println("*****************");
List<String> allWords = getAllWordsFromEachLineSorted(listWithoutQuotes);
System.out.println(allWords);
System.out.println("****************");
List<Integer> scores = calculateStoreForAList(allWords);
System.out.println(scores);
}
static List<String> readAllLinesFromFile(String fileName) throws IOException{
return Files.readAllLines(Paths.get(fileName));
}
public static List<String> removeQuotes(List<String> listWithQoutes) {
return listWithQoutes.stream()
.map(s -> s.replaceAll("\"", ""))
.collect(Collectors.toList());
}
public static List<String> getAllWordsFromEachLineSorted(List<String> lines) {
return lines.stream()
.map(s -> s.split("\\s*,\\s*"))
.flatMap(Arrays::stream)
.sorted()
.collect(Collectors.toList());
}
static int calculateScore(String word){
return word.chars()
.map(i -> i-64)
.sum();
}
static List<Integer> calculateStoreForAList(List<String> allWords){
return allWords.stream()
.map(str -> calculateScore(str))
.collect(Collectors.toList());
}
}
Вы должны увидеть что-то похожее на
"DSRD","KJHT","BFXXX","OUYTP"
"ABCD","XSHTKK","RTZI","HKLOPQ"
"BGTSZ","ASY","LOMCV","DESRAW"
"VMWEE","ERTZU","GSDFX","BHGFD"
"CD","FRTZU","JUHL","RETZ"
**********************
DSRD,KJHT,BFXXX,OUYTP
ABCD,XSHTKK,RTZI,HKLOPQ
BGTSZ,ASY,LOMCV,DESRAW
VMWEE,ERTZU,GSDFX,BHGFD
CD,FRTZU,JUHL,RETZ
*****************
[ABCD, ASY, BFXXX, BGTSZ, BHGFD, CD, DESRAW, DSRD, ERTZU, FRTZU, GSDFX, HKLOPQ, JUHL, KJHT, LOMCV, OUYTP, RETZ, RTZI, VMWEE, XSHTKK]
****************
[10, 45, 80, 74, 27, 7, 70, 45, 90, 91, 60, 79, 51, 49, 65, 97, 69, 73, 68, 93]