Skip to content

Instantly share code, notes, and snippets.

@moopat
Last active August 29, 2015 14:13
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save moopat/98961b13d26e532af0ab to your computer and use it in GitHub Desktop.
Save moopat/98961b13d26e532af0ab to your computer and use it in GitHub Desktop.
Show the number of occurrences of every letter in a text entered by the user histogram-style.
package at.swe01;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class LetterHistrogram {
public static int[] values;
public static void main(String[] args){
String text = "";
boolean isValidText = false;
while(!isValidText){
text = readString("Gib einen Text ein!");
if(text == null || text.length() < 1){
System.out.println("Der Text muss zumindest ein Zeichen lang sein.");
} else {
isValidText = true;
}
}
// Ein Array in der Größe des Alphabets wird initialisiert.
// Es wird für jeden Buchstaben die Anzahl der Vorkommnisse enthalten.
// values[0] soll die Werte für A, und values[25] die Werte für Z enthalten.
values = new int[26];
// Der Text wird in ein großbuchstabiges Character-Array gespeichert.
char[] textchars = text.toUpperCase().toCharArray();
// Alle Buchstaben des Textes werden nacheinander begutachtet.
for(char letter : textchars){
// Ist der Buchstabe im Bereich A-Z?
if(letter >= 'A' && letter <= 'Z'){
// Der Array-Index errechnet sich durch letter - 'A', so dass 'A' am Index 0 ist.
// Der Wert wird inkrementiert.
values[letter - 'A']++;
}
}
// Alle Buchstaben des Alphabets werden nacheinander begutachtet.
for(int i = 0; i < values.length; i++){
StringBuilder output = new StringBuilder();
// Zuerst wird der jeweilige Buchstabe an den String angehängt,
// indem der Index zu 'A' addiert und in char umgewandelt wird.
output.append((char) ('A' + i));
output.append(" ");
// So oft wie der Buchstabe vorgekommen ist (= Wert von values[i]) wird ein * angezeigt.
for(int j = 0; j < values[i]; j++){
output.append("*");
}
// Zum Schluss wird aus dem "output" ein String gemacht und angezeigt.
System.out.println(output.toString());
}
}
/**
* 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