Hi,
I insert in my file.txt
/*
Das kostet 1 Dollar, aber das sind 12.
Die Variable heißt file1.
110 ist eine Zahl.
*/
On the console i got:
/*
Das kostet Eins Dollar, aber das sind Zwölf.
Die Variable heißt file1.
110 ist eine Zahl.
*/
- no '\n' or 'space' on the end of each Line...
Maybe there is a test case which i did not expect?, some Ideas?^^
package de.codegym.task.task19.task1924;
import java.io.*;
import java.util.*;
/*
Zahlen ersetzen
*/
public class Solution {
public static Map<Integer, String> map = new HashMap<Integer, String>();
static {
map.put(0, "Null");
map.put(1, "Eins");
map.put(2, "Zwei");
map.put(3, "Drei");
map.put(4, "Vier");
map.put(5, "Fünf");
map.put(6, "Sechs");
map.put(7, "Sieben");
map.put(8, "Acht");
map.put(9, "Neun");
map.put(10, "Zehn");
map.put(11, "Elf");
map.put(12, "Zwölf");
}
public static void main(String[] args) throws IOException {
// Namen einlesen
BufferedReader nameReader = new BufferedReader(new InputStreamReader(System.in));
String fileName = nameReader.readLine();
nameReader.close();
// Datei einlesen und speichern
ArrayList<String> stringList = new ArrayList<>();
BufferedReader fileReader = new BufferedReader(new FileReader(fileName));
while (fileReader.ready()) {
String[] tempStringArray = fileReader.readLine().trim().split(" ");
for (String s : tempStringArray) {
stringList.add(s);
stringList.add(" ");
}
stringList.add("\n");
}
fileReader.close();
// // Test Einlesen
// for (String s : stringList) {
// System.out.println(s);
// }
// // alles gut :)
// Satzzeichen vom Wert trennen
ArrayList<String> sortedStringList = new ArrayList<>();
for (String s : stringList) {
if (s.contains(",") || s.contains(".") || s.contains("?") || s.contains("!")) {
String value = s.substring(0, s.length() - 1);
String satzZeichen = s.substring(s.length() - 1, s.length());
sortedStringList.add(value);
sortedStringList.add(satzZeichen);
} else {
sortedStringList.add(s);
}
}
// // Test separieren
// for (String s : sortedStringList) {
// System.out.println(s);
// }
// // ok
// finden und ersetzen und speichern
// Hier wird später ersetzt!
// speichern der Wörter + ID, dass später ersetzt werden kann, bei ArrayList ist ersetzen schwierig
HashMap<Integer, String> stringMap = new HashMap<>();
for (int i = 0; i < sortedStringList.size(); i++) {
stringMap.put(i, sortedStringList.get(i));
}
// Die Prüfwerte aus dem Set holen
Set<Integer> keySet = map.keySet();
// // Sortieren, dass beim Prüfen mit dem größten Wert begonnen werden kann.
// ArrayList<Integer> keyList = new ArrayList<>(keySet);
// Collections.sort(keyList);
// Collections.reverse(keyList);
// // Test des Sort, geht :)
// System.out.println(keyList);
// finden und ersetzen
for (int i = 0; i < sortedStringList.size(); i++) {
for (Integer integer : keySet) {
if (sortedStringList.get(i).equals(integer.toString())) {
stringMap.replace(i, map.get(integer));
break;
}
}
}
// // Test ersetzen
// for (int i = 0; i < stringMap.size(); i++) {
// System.out.println(stringMap.get(i));
// }
// // ok
// Leerzeichen nach dem Zeilenumbruch finden und entfernen
StringBuilder tempStringBuilder = new StringBuilder();
StringBuilder finalStringBuilder = new StringBuilder();
for (String s : stringMap.values()) {
char[] tempChars = s.toCharArray();
for (char c : tempChars) {
if (c == '\n') {
finalStringBuilder.append(tempStringBuilder.toString().trim());
finalStringBuilder.append('\n');
tempStringBuilder.delete(0, tempStringBuilder.length());
} else {
tempStringBuilder.append(c);
}
}
}
System.out.println(finalStringBuilder.toString());
}
}