char Array unbekanntes Zeichen selbstständig anlegen

zenpaticx

Mitglied
Hallo,

unter dem Titel kann man sich zwar nicht ganz vorstellen was ich meine, aber vielleicht kann man ja die Richtung nachvollziehen :).
Ich möchte ein Programm schreiben, was anhand eines Textes erkennt, welche Sprache verwendet wird (anhand der prozentualen Häufigkeit von Buchstaben et cetera). Damit man nicht jedes Zeichen selbst anlegen muss (A,a,B,b,á, é, usw...), wollte ich gerne eine Textdatei jeden Buchstaben durchgehen und dann in ein Array anlegen. Gibt es diesen Buchstaben in dem Array schon, soll er hochgezählt werden (Anzahl), gibt es ihn nicht, dann soll er angelegt werden und ein Wert aufgezählt werden. Hierbei kommt auch schon das erste Problem was ich mir denke (aber vielleicht gibt es ja auch dafür eine Lösung). Den zusätzlichen Char im Array anzulegen dürfte nicht schwer sein, wie soll das aber mit der Variablen zum Hochzählen gemacht werden? Die muss ja auch irgendwie deklariert werden..

Den Code den ich jetzt habe, wollte ich auch schon mal posten (Vorsicht: nicht sehr professionell :D)

Java:
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.util.*;

import javax.swing.JFileChooser;


public class Buchstabenerkennung {

   public static void main(String[] args) throws IOException {
     // TODO Auto-generated method stub
     
     BufferedReader br = null;
     String curline;
     
     char[] cArray = new char[500];
     
     br = new BufferedReader(new FileReader("C:/Desktop/Java/Text/Inhalt.txt"));
    while((curline = br.readLine()) != null){
       for(int i = 0; i < cArray.length; i++){
         char c = curline.charAt(i); //Das liegt bestimmt an der Zeile wegen curline.charAt(i)
         if(cArray[i] == c){
           System.out.println("Yep - " + c);
         } else{
           cArray[i] = c;
         }
         
       }
       
       
    }

Es kommt übrigens eine OutOfBoundsException.

Vielen Dank!
 

Baldur

Aktives Mitglied
Du benutzt i gleichzeitig als Index für curline als auch dein char-Array. Wenn deine Zeile weniger Zeichen hat als dein Array groß ist, dürfte da eine OutOfBounds Exception fliegen.

Ein Char ist im Prinzip ja auch bloß eine Zahl, also kannst du den Char theoretisch einfach als Array-Index nutzen und das Feld an der entsprechenden Stelle hochzählen. Allerdings klappt das auch nur gut für die normalen europäischen Sprachen. Wenn du z.B. russisch oder andere asiatische Sprachen mit einbeziehen willst, hast du irgendwann mehr als 500 verschiedene Zeichen, und vor allem auch welche, deren Charaktercode deutlich höher liegen kann. Gilt auch für bestimmte Sonderzeichen, wie z.B. mathematische Symbole.
Statt dem Array kannst du z.B. auch einfach eine HashMap mit einem Char als Schlüssel verwenden. Damit hättest du keine Begrenzung für die Anzahl der Zeichen.
 

mrBrown

Super-Moderator
Mitarbeiter
Du kannst entweder Map<Character,Integer> oder new int[Character.MAX_VALUE+1] nutzen.
Bei der Map #merge, beim array einfach ++ zum zählen, mit dem aktuellem Character als key bzw index.

Wenn du den Zähler in einer extra Klasse kapselst und einfach eine inc(char c) bereitstellst, kannst du beides mal testen, und hast den Teil gleich von Einlesen getrennt ;)

Das Einlesen könntest du einfach mit #read machen, damit liest dz Zeichenweise und nicht Zeilenweise, und musst die dann auch nicht noch durchgehen ;)
 

zenpaticx

Mitglied
Abend,

ich habe den Programmteil soweit fast fertig, der die Chars und die Werte verknüpft. Mit kurzer Recherche ist die Idee mit einer HashMap wirklich gut.

Der Code ist folgender:
Java:
  public static void main(String[] args) {
     // TODO Auto-generated method stub
    
     HashMap<Character, Integer> hMap = new HashMap<Character, Integer>();
     String str = new String("Das ist ein sehr langer Text");
     for(int j = 0; j < str.length(); j++){
       char c = str.charAt(j);
      
       if(hMap.get(c) == null){
         hMap.put(c, 1);
       } else{
         int i = hMap.get(c);
         i++;
         hMap.put(c, i);
         //System.out.println("Der Buchstabe " + c + " kommt so oft vor: " + hMap.get(c));
       }
      
     }
    
     for(int p = 0; p < str.length(); p++){
       char c = str.charAt(p);
       if(hMap.get(c) != null){
         System.out.println("Der Buchstabe " + c + " kommt so oft vor: " + hMap.get(c));
       }
     }
    
   }

Jemand eine Idee, wie ich dafür sorge, dass nicht bspw. der Buchstabe "e" vier mal unten ausgegeben wird? Also dass er sozusagen einen finalen Zählerstand ausgibt? Weil in der unteren for-Schleife wird ja jeder Buchstabe - auch wenn er doppelt ist - ausgegeben mit der Anzahl, was ich persönlich nicht optimal finde.

Anregungen reichen!

Danke :)
 

mrBrown

Super-Moderator
Mitarbeiter
Du kannst dir aus der Map alle keys holen, also alle vorkommenden Buchstaben, und für diese die Anzahl ausgeben (oder das entrySet nutzen).
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
P Wieso kann ich als Index für einen Array einen Char angeben? Java Basics - Anfänger-Themen 3
D 2D Char Array into String Java Basics - Anfänger-Themen 2
O Zahlen aus einem char-array per char + Zeichen addieren Java Basics - Anfänger-Themen 2
M Wie kann eine Methode für ein vorhandenes "Array von char" einen Index-Wert zurückliefern? Java Basics - Anfänger-Themen 3
A Löschen von Leerzeichen in einem char array ohne methoden Java Basics - Anfänger-Themen 6
R String in char-Array übertragen Java Basics - Anfänger-Themen 5
Z Char Array an zufälligen stellen mit einem "x" füllen. Java Basics - Anfänger-Themen 4
A char array wird überschrieben Java Basics - Anfänger-Themen 6
E 2D Array - char durch die Matrix "wandern" lassen Java Basics - Anfänger-Themen 7
I Methoden char Array Aufgabe (bitte hierbei um Hilfe) Java Basics - Anfänger-Themen 3
I wieder mit einer Umwandelung habe ich Problem (diesmal von char Array zu char) Java Basics - Anfänger-Themen 1
I char Array to String Java Basics - Anfänger-Themen 3
C (char) Array einlesen Java Basics - Anfänger-Themen 8
H char-Array Java Basics - Anfänger-Themen 22
C Methoden String in char Array Java Basics - Anfänger-Themen 3
E Wie wird in Java ein Char-Array terminiert ? Java Basics - Anfänger-Themen 15
W Char Array bearbeiten Java Basics - Anfänger-Themen 6
A Char-Array erstellen Java Basics - Anfänger-Themen 35
M Bestimmen, wie oft ein Char in einem Array vorkommt Java Basics - Anfänger-Themen 2
C char array-positionstausch Java Basics - Anfänger-Themen 6
R Anzahl von Zeichen in einem Char Array Java Basics - Anfänger-Themen 4
L zweidimensionales char array reihenfolge ändern ? Java Basics - Anfänger-Themen 2
D Best Practice String aufbau - Char Array oder Anhängen Java Basics - Anfänger-Themen 11
S For Schleife Char Array Java Basics - Anfänger-Themen 1
W char-Array auf bestimmte Zeichen prüfen Java Basics - Anfänger-Themen 10
B char Array mit ints Java Basics - Anfänger-Themen 7
J Char-Array - NullPointerException Java Basics - Anfänger-Themen 3
J char-Array rückwärts ausgeben und in neues Char-Array speichern Java Basics - Anfänger-Themen 3
S Array - index von Benutzer eingegebenen char ausgeben Java Basics - Anfänger-Themen 3
M char Array füllen Java Basics - Anfänger-Themen 2
H ArrayList mit char- Array befüllen Java Basics - Anfänger-Themen 12
P Datentypen String auf JTextField wird zu Char-Array und anschließend zu int Java Basics - Anfänger-Themen 12
D Char Array ab bestimmter Stelle in neuem Speichern Java Basics - Anfänger-Themen 13
D Eine Stelle eines Char- Arrays nach dem vorkommen in einem ganzem anderem Array überprüfen Java Basics - Anfänger-Themen 20
C Leerzeichen im char Array setzen Java Basics - Anfänger-Themen 33
J Alle Vorkommen eines chars in einem Array durch einen anderen char ersetzen Java Basics - Anfänger-Themen 10
N Methode die String in char-Array wandelt!! Java Basics - Anfänger-Themen 11
D Erste Schritte String Array in char Array umwandeln? Java Basics - Anfänger-Themen 1
E Char-Array zu String Java Basics - Anfänger-Themen 2
M Datentypen Char Array in String Array gibt Probleme Java Basics - Anfänger-Themen 10
M Char-Array Problem Java Basics - Anfänger-Themen 6
F Char Array splitten Java Basics - Anfänger-Themen 5
S Mehrdimensionales Char-Array initialisieren Java Basics - Anfänger-Themen 17
S char Array in Character KlassenArray? Java Basics - Anfänger-Themen 24
Semox Datentypen Einlesen von char in Array schlägt unerwartet fehl Java Basics - Anfänger-Themen 4
H Datentypen char array in int umwandeln Java Basics - Anfänger-Themen 9
B Unterschied zwischen String & char Array? Java Basics - Anfänger-Themen 5
B Datentypen Char Array in einen String verwandeln? Java Basics - Anfänger-Themen 2
J char array eintraege geben Java Basics - Anfänger-Themen 2
T Char Array in fremder Klasse Java Basics - Anfänger-Themen 20
S Char Array Werte in short variablen speichern Java Basics - Anfänger-Themen 4
P Array index per char suche auslesen Java Basics - Anfänger-Themen 3
M 2D char Array anzeigen Java Basics - Anfänger-Themen 4
G Zeichenkette in char-Array konvertieren Java Basics - Anfänger-Themen 13
M wie auf ein feld mit leerzeichen in einem char array prüfen? Java Basics - Anfänger-Themen 4
J String in char Array Java Basics - Anfänger-Themen 2
J Verständnisfrage zu Char-Array Java Basics - Anfänger-Themen 5
N String/char-array aus datei auslesen Java Basics - Anfänger-Themen 2
M char Array in int Array Java Basics - Anfänger-Themen 3
J Array - Vertauschen Problem mit char/int Java Basics - Anfänger-Themen 6
Jen Array einlesen, Int und Char Java Basics - Anfänger-Themen 57
J Char-Array mit variabler Länge zurückliefern. Java Basics - Anfänger-Themen 11
B Deklaration eines char-array Java Basics - Anfänger-Themen 2
F abc char array Java Basics - Anfänger-Themen 3
J char[] reverse Array Java Basics - Anfänger-Themen 9
G Zufällige Buchstaben in char-Array Java Basics - Anfänger-Themen 9
0 Häufigstes Zeichen in einem Char-Array ermitteln? Java Basics - Anfänger-Themen 6
M Char Array mit Sonderzeichen in String umwandeln Java Basics - Anfänger-Themen 21
T String als Array und Umwandlung in Char Java Basics - Anfänger-Themen 7
J StringBuffer-Objekt soll auf Char-Array zugreifen. Java Basics - Anfänger-Themen 4
F char to byte array Java Basics - Anfänger-Themen 8
G Char oder Byte Array mit unbekannter länge erstellen? Java Basics - Anfänger-Themen 1
S Testen ob ein Char Array noch nicht belegt ist! Java Basics - Anfänger-Themen 3
G Char Array konvertieren Java Basics - Anfänger-Themen 7
megachucky probleme mit einem char-array. Java Basics - Anfänger-Themen 6
H char Array in String Java Basics - Anfänger-Themen 7
E Ziffer in char-Array Java Basics - Anfänger-Themen 2
S String in char-Array einfügen Java Basics - Anfänger-Themen 8
G Array und Char Java Basics - Anfänger-Themen 3
Tommilee Char ausgeben Java Basics - Anfänger-Themen 5
M error: '.class' expected switch(char) Java Basics - Anfänger-Themen 32
JordenJost char variable funktioniert irgendwie nicht a+b ergibt nicht à Java Basics - Anfänger-Themen 4
java-starter Erste Schritte Eingabe in Char wert umwandeln Java Basics - Anfänger-Themen 7
P9cman Char Index rekursiv finden Java Basics - Anfänger-Themen 4
Fats Waller Compiler-Fehler Kann ich einen String und die Summe zweier Char Werte mittels der println Anweisung ausgeben Java Basics - Anfänger-Themen 4
C String/Char-API Java Basics - Anfänger-Themen 13
U Char zu einem String machen Java Basics - Anfänger-Themen 1
O Ich ahbe einen char und diesen soll ich bei .matches prüfen, also ob der char in meiner Zeichenkette vorhanden ist, wie mache ich das? Java Basics - Anfänger-Themen 9
W char über die Konsole? Java Basics - Anfänger-Themen 7
C char c Java Basics - Anfänger-Themen 13
D String und char in String speichern Java Basics - Anfänger-Themen 5
S zweidimensionale char arrays Java Basics - Anfänger-Themen 14
P Methoden Namen trennen mit .substring(), char.At(), .lenght() Java Basics - Anfänger-Themen 8
A Datentyp char Java Basics - Anfänger-Themen 27
A Char und modulo Java Basics - Anfänger-Themen 8
F Switch case wird als char nicht erkannt.... Java Basics - Anfänger-Themen 6
D Datentypen Char deklaration Java Basics - Anfänger-Themen 4
J Java char.at() Probelm Java Basics - Anfänger-Themen 12
S char auf buchstabe/zeichen prüfen Java Basics - Anfänger-Themen 1
M Die länge von char Java Basics - Anfänger-Themen 6

Ähnliche Java Themen

Neue Themen


Oben