Last active
August 29, 2015 14:13
-
-
Save moopat/80e4c307b25ac5cb59d6 to your computer and use it in GitHub Desktop.
Search for a String in another String and highlight occurrences by printing them in uppercase while all other characters are printed in lowercase.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package at.swe01; | |
import java.io.BufferedReader; | |
import java.io.IOException; | |
import java.io.InputStreamReader; | |
public class SearchInString { | |
static String text = "Der Österreichische Hausärzteverband kann sich immer noch nicht mit der Elektronischen Gesundheitsakte (Elga) anfreunden.\nFür Hausärztepräsident Christian Euler ist es eine kranke Akte. Konkret bezieht sich die Kritik auf die lange \nBearbeitungszeit der Abmeldungserklärungen und auf die Nichteinhaltung des Zeitplans. Der Hausärzteverband rät den \nPatienten weiterhin, sich von Elga abzumelden, also das Opt-out wahrzunehmen, fordert aber eigentlich ein System, das auf \nFreiwilligkeit basiert."; | |
public static void main(String[] args) { | |
boolean isValidSearchTerm = false; | |
String searchTerm = ""; | |
// Suchbegriff einlesen | |
while(!isValidSearchTerm){ | |
searchTerm = readString("Bitte gib einen Suchbegriff ein: "); | |
if(searchTerm != null && searchTerm.length() >= 1){ | |
isValidSearchTerm = true; | |
} else { | |
System.out.println("(!) Der Suchbegriff muss mindestens ein Zeichen lang sein!"); | |
} | |
} | |
// Wir wandeln die Texte in Kleinbuchstaben um, damit wir leichter suchen können. | |
text = text.toLowerCase(); | |
searchTerm = searchTerm.toLowerCase(); | |
// Kommt der Suchbegriff überhaupt vor? | |
boolean occurs = text.contains(searchTerm); | |
if(occurs){ | |
// Ausgeben, wie oft der Suchbegriff vorkommt. | |
System.out.println("\"" + searchTerm.toUpperCase() + "\" kommt " + getNumberOfOccurrences(text, searchTerm) + " mal vor."); | |
// Den Suchbegriff im Text durch den Suchbegriff in Großschreibung ersetzen und ausgeben. | |
System.out.println(text.replace(searchTerm, searchTerm.toUpperCase())); | |
} else { | |
// Der Suchbegriff wurde nicht gefunden. | |
System.out.println("\"" + searchTerm.toUpperCase() + "\" wurde im Text nicht gefunden."); | |
} | |
} | |
/** | |
* Liefert zurück wie oft "search" in "text" vorkommt. | |
* @param text zu durchsuchender Text | |
* @param search Suchbegriff | |
* @return Anzahl der Vorkommnisse | |
*/ | |
public static int getNumberOfOccurrences(String text, String search){ | |
// Wir geben das Ergebnis für eine Suche ab Stelle 0 zurück. | |
return getNumberOfOccurrences(text, search, 0); | |
} | |
/** | |
* Liefert zurück wie oft "search" in "text" ab Stelle "offset" vorkommt. | |
* @param text zu durchsuchender Text | |
* @param search Suchbegriff | |
* @param offset Stelle, ab der gesucht wird | |
* @return Anzahl der Vorkommnisse | |
*/ | |
public static int getNumberOfOccurrences(String text, String search, int offset){ | |
// Standardmäßig gehen wir davon aus, dass der Begriff nicht gefunden wird. | |
int occurrences = 0; | |
// Die Position des Suchbegriffs im Text, oder -1 falls er nicht vorkommt. | |
int position = text.indexOf(search, offset); | |
// Wenn der Begriff nicht gefunden wurde geben wir 0 zurück. | |
if(position < 0) return occurrences; | |
// Ansonsten erhöhen wir die occurrences auf 1 | |
occurrences++; | |
// Der rekursive Aufruf startet die Suche am Ende des letzten Treffers und liefert | |
// zurück wie viele Treffer es ab der jeweiligen Position gibt. | |
return occurrences + getNumberOfOccurrences(text, search, position + search.length()); | |
} | |
/** | |
* Methode zum Lesen eines Strings aus der Kommandozeile. | |
* @param prompt Der vor der Eingabe anzuzeigende Text oder null. | |
* @return Eingegebener String | |
*/ | |
public static String readString(String prompt){ | |
if(prompt != null) { | |
System.out.println(prompt); | |
} | |
BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); | |
String input = null; | |
try { | |
input = br.readLine(); | |
} catch (IOException ioe) { | |
System.err.println("(!) Input kann nicht gelesen werden."); | |
System.exit(1); | |
} | |
return input; | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment