// Autor: Martin Heinrich // MatNr: 0125222 // BspNr: 3061 // Titel: Textbearbeitung (mit mehreren Strings) // Beschreibung: Ein String wird umgebrochen und bestimmte Interpunktionsfehler korrigiert. // Eingabe: Höchstens 10 Strings, anschließend ein String mit einer Breitenangabe // Ausgabe: Der bearbeitete und umgebrochene String sowie Wortanzahl und Zahl der Abtrennungen // Fehlermeldungen: "FALSCHE EINGABE" bei nicht korrigierbaren Eingabefehlern // Die Bezeichnungen //[Ziffer][Buchstabe] beziehen sich auf die Dokumentation (Texte.txt) import eprog.*; // Verwendung des EPROG-Packages public class Texte extends EprogIO // Methoden der EprogIO können ohne Klassenangabe verwendet werden { private static final String Numbers = "1234567890"; private static final String msgValErr = "FALSCHE EINGABE"; // Fehlermeldung bei nicht korrigierbaren Eingabefehlern private static final int maxStrings = 10; // maximale Anzahl einzulesender Strings (exkl. Breitenangabe) private static final int maxWidth = 55; // maximale Zeilenbreite beim Umbrechen private static final int minWidth = 3; // minimale Zeilenbreite beim Umbrechen private static final int minPartOfWidth = 3; // minimale Zeilenbreite als Teil der Gesamtstringlänge private static Strings text = new Strings(); // enthält und bearbeitet die eingegebenen Strings private static int width; // enthält die Breite, bei der umgebrochen werden soll //**************************************************************** public static void main(String[] args) { //1a if (getStrings() && // prüft maximale Anzahl Strings (width >= minWidth) && // ...minimale Zeilenbreite (width <= maxWidth) && // ...maximale Zeilenbreite //1b (width <= text.getString().length()) && (width >= (float)text.getString().length()/minPartOfWidth) && // ...relative Zeilenbreite // Bei einer Ganzzahldivision wäre weder '>' noch '>=' immer richtig! (text.checkSpecifications()) && // s. Strings.java (text.forceLines(width))) // s. Strings.java { println(text.getString()); // Ausgabe des Textes println(text.getWordCount() + " " + text.getBreakCount()); // Ausgabe von Wortanzahl und Abtrennungen } else {println(msgValErr);}; // if (getStrings()) } // main //**************************************************************** //**************************************************************** private static boolean getStrings() { // liest die Strings ein String tString; // Zwischenspeicher während der Eingabe //2a try { for (int i = 0; i < maxStrings; i++) { tString = readWord(); if (Numbers.indexOf(tString.charAt(0)) >= 0) // erstes Zeichen ist Ziffer { width = Integer.valueOf(tString).intValue(); // auslesen der Breitenangabe (innerhalb try!) return true; } else // erstes Zeichen ist nicht Ziffer { text.append(tString); }; // if (erstes Zeichen ist Ziffer) }; // for width = readInt(); // falls weitere Wörter eingegeben werden: Fehler } catch (Exception e) {return false;}; return true; } // getStrings //**************************************************************** } // Texte