Textfile mit StringTokenizer einlesen und sortiert ausgeben

lostmaster

Mitglied
Hallo,

ich möchte gerne eine Textdatei (.txt) einlesen mit dem StringTokenizer in einzelne Tokens zerlegen diese dann in ein Array packen, sortieren, und ausgeben.

Das einlesen funktioniert wunderbar, auch das zerlegen. Aber das speichern in ein Array und das sortieren mittels Arrays.sort (mit Hilfe von "import java.util.Arrays;") macht mir noch Probleme glaube ich.

Eclipse meldet mir keine Fehler aber wenn ich mein Programm über die Konsole aufrufe, dann gibt es folgende fehlermeldung:

Code:
Exception in thread "main" java.lang.NullPointerException
at java.util.ComparableTimSort.countRunAndMakeAscending<Unknown Source>
at java.util.ComparableTimSort.sort<Unknown Source>
at java.util.ComparableTimSort.sort<Unknown Source>
at java.util.Arrays.sort<Unknown Source>
at tokenindex.main<tokenindex.java:26>

Hier mein Java-Code:

Java:
import java.io.*;
import java.util.Arrays;
import java.util.StringTokenizer;

	
public class tokenindex2 {
	
	public static void main(String[] args) throws Exception {	
	
	if(nM(args)){																					
		File d1 = new File(args[0]);																		
																	
			String entryLyrics = leL(d1);													
			System.out.println(entryLyrics);
							
			StringTokenizer d2 = new StringTokenizer(entryLyrics, " ");
			String [] d2Array = new String[d2.countTokens()];
			
			for(int i=1;i<=d2Array.length;i++){
				d2Array[d2Array.length-1]=d2.nextToken();
				
			
			Arrays.sort(d2Array);
				for (int j = 0; j < d2Array.length; j++) {
					System.out.println(d2Array[j]);
					}
				}
			}
			
				
	}

}

ich hab mal die einlese-methode und check-methode rausgelassen, da diese funktionieren ;)

Ich wäre sehr hilfreich für Tipps und Anregungen.

Vielen Dank :toll:
 

Gism0

Mitglied
Du weist hier immer auf die gleiche "Zelle" im Array

Java:
for(int i=1;i<=d2Array.length;i++){
    d2Array[d2Array.length-1]=d2.nextToken();
}


Java:
for(int i=1;i<d2Array.length;i++){
    d2Array[i]=d2.nextToken();
}

sollte dir mehr erfolg bringen
 

Gism0

Mitglied
Java:
for(int i=1;i<=d2Array.length;i++){
                d2Array[d2Array.length-1]=d2.nextToken();
                
            
            Arrays.sort(d2Array);
                for (int j = 0; j < d2Array.length; j++) {
                    System.out.println(d2Array[j]);
                    }
                }
            }


die 2. schleife ist in der erste. Du versuchst dort alle Zellen auszugeben von 0 bis länge des arrays.

Das wird aber nicht klappen solange sie nicht alle einen Inhalt haben.


Versuch also einfach mal
Java:
 for (int j = 0; j <= i; j++) {
                    System.out.println(d2Array[j]);
                    }


Dann geht er immer nur bis zur aktuell gefüllten Zeile ;)
 

ssoul26

Bekanntes Mitglied
Auch bei einem leeren String Array gibts Ausgaben ohne Exception -> "null".

Läuft alles, wenn du die Zeile mit Sort auskommentierst? Dein Problem ist, dass das Array nicht komplett gefüllt ist und du trotzdem versuchst es zu sortieren. Fülle als erstes das Array komplett und sortiere dann.
 
Zuletzt bearbeitet:

X5-599

Top Contributor
Warum fängt i bei 1 an? Hat das einen Grund? 0 basiert macht es das ganze einfacher:

Java:
for(int i=0;i<d2Array.length;i++){
                d2Array[i]=d2.nextToken();
 

lostmaster

Mitglied
Läuft alles, wenn du die Zeile mit Sort auskommentierst? Dein Problem ist, dass das Array nicht komplett gefüllt ist und du trotzdem versuchst es zu sortieren. Fülle als erstes das Array komplett und sortiere dann.

Habs mal auskommentiert und es funktioniert soweit bis auf das ich folgendes am ende bekomme:


Code:
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 12 at tokenindex.main <tokenindex.java:29>

das hab ich jetzt aber beheben können, da ich die for-schleifen mit anfang 0 jeweils und ende array.length -1 angegeben habe.

somit bleibt nur noch der Fehler mit dem Arrays.sort(d2Array)

hier mein soweit verbesserter Code:

Java:
	public static void main(String[] args) throws Exception {	
	
	if(nM(args)){																					
		File d1 = new File(args[0]);																		
																	
			String entryLyrics = leL(d1);													
			System.out.println(eL);
							
			StringTokenizer d2 = new StringTokenizer(eL, " ");
			String [] d2Array = new String[d2.countTokens()];
			
			for(int i=0;i<d2Array.length - 1;i++){
			    d2Array[i]=d2.nextToken();
			}
				
			
			Arrays.sort(data2Array);
			 
			
			
			for (int j = 0; j <= d2Array.length -1; j++) {
                 System.out.println(d2Array[j]);
                 }
					}
				}
 

lostmaster

Mitglied
Hier mal mein meine fast fertige Lösung:

Java:
import java.io.*;
import java.util.*;
import java.util.regex.Pattern;

public class TokenIndex_Exercixe1 {																				//defines public class called "TokenIndex"
	
																												
				
public static void main(String[] args) throws Exception {														//defines main-method which throws Exception
				
	if(noMisentry(args)){																						//checks by noMisentry-method if input in console is correct	
		File data1 = new File(args[0]);																			//loads File from args[0]
					
		@SuppressWarnings("resource")
		BufferedReader inputReader = new BufferedReader (new InputStreamReader(new FileInputStream(data1)));	//loads text from file into main-method
					
		String data2 = "";																						//defines helpstring
		String data3 = "";																						//defines helpstring
									
					
		while (inputReader.ready() == true) {																	//while-loop to fill helpstring
			data2 = inputReader.readLine();																		//reading lines of textfilen into data2
			    
		System.out.println("Your loaded Text: ");																//displaying "your laoded Text: "
		System.out.println("\n");																				//displaying blankline
		System.out.println("\"" + data2 + "\"");																//displaying loaded Text in original
		System.out.println("\n");																				//displaying blankline
	   	System.out.println("Splitting text and display token in alphabetically order!");						//displaying "Splitting text and display token in alphabetically order!"
	   	System.out.println("\n");																				//displaying blankline
		System.out.println("Splitting completed: ");															//displaying "Splitting completed: "
		System.out.println("\n");																				//displaying blankline

			            
		StringTokenizer sortingOutDelimiter = new StringTokenizer(data2,",.!?/()[]\\;:\"§$%&=");				//using StringTokenizer to sort out delimiters from text
			            
			while(sortingOutDelimiter.hasMoreTokens()== true) {													//while-loop to load several tokens in stringhelper data3
			    data3 = data3 + sortingOutDelimiter.nextElement()+ "";							
			}
			           
		}
			       		
		String sortWords = data3;																				//defines sortWords to sort tokens
		String[] inputAsArray = sortWords.split(Pattern.quote(" ")); 											//delete blanks and convert character-string to array
			            
		List<String> inputAsList = Arrays.asList(inputAsArray); 												//fill Array-content in a List called inputAsList
		Collections.sort(inputAsList);																			//Sorting List in alphabetically-order by collections.sort-function
	
		
		
		for(int i=0;i < inputAsArray.length;i++) {																//for-loop to sort list for each token
			System.out.println(inputAsList.get(i));																//displaying tokens in alphabetically correct order
		}
	}
}
				

/*
if (inList(list,word)){
	list.add(word);
	}

public static boolean inList(List<E> list, String pWrd){
	int i = list.size();
	
	for(int j = 0; j <-(i-1); j++){
		String str1 = new String((String) list.get(j));
		String str2 = pWord;
		if(str1.equals(str2)){
			return false;
		
		}
	}
}
*/

				
public static boolean noMisentry(String [] args){															 	//defines public class noMisentry to check if input in console ist correct
					
	if(args.length == 1){																						//if-statement to check if 1 parameter is given
		return true;																							//returning "true" to main-method
	}
		
	else {																										//else-statemtent if input isn't correct
		System.out.println("Input isn´t working! Please input 1 parameters with fontcode. Thank You!");			//displaying help, caused by incorrect input in console
		return false;																							//returning false to main-method, so that main method is not starting											
						
		}																								
					
	}	

}

funktioniert soweit einwandfrei.. jedoch habe ich es nicht hinbekommen wörter die mehrmals im text vorkommen nur einmal auszugeben.. ich hatte versucht dafür eine methode zu schreiben, die hier "inList" heißt und auskommentiert ist. Hat jmd. eine ahnung wie ich das noch machen könnte?

Danke

Gruß Lostmaster
 

turtle

Top Contributor
Ein Set erlaubt keine Duplikate. Also füge doch Deine Strings einem Set zu und sortiere dies.
Java:
		String[] inputAsArray = new String[] { "hugo", "Datensatz-1",
				"Datensatz-2", "hugo" };
		Set<String> inputSet = new HashSet<String>();
		for (String string : inputAsArray) {
			inputSet.add(string);
		}
		String[] array = inputSet.toArray(new String[0]);
		List<String> inputAsList = Arrays.asList(array);
		Collections.sort(inputAsList);
		for (String string : inputAsList) {
			System.out.println(string);
		}
	}
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
F Textfile auslesen und durchsuchen Java Basics - Anfänger-Themen 13
N User Eingabe mit Zeile aus TextFile vergleichen Java Basics - Anfänger-Themen 13
D Textfile lesen/schreiben abhängig vom inhalt Java Basics - Anfänger-Themen 6
A Textfile wird nur unvollständig eingelesen Java Basics - Anfänger-Themen 4
M Import Unicode Textfile Java Basics - Anfänger-Themen 10
L Textfile mit BufferReader einlesen Java Basics - Anfänger-Themen 4
A Textfile verarbeiten. Java Basics - Anfänger-Themen 15
M textfile mit java auslesen Java Basics - Anfänger-Themen 4
mwildam Textfile lesen und schreiben - so viele Möglichkeiten Java Basics - Anfänger-Themen 5
M if-else-endif in Textfile erkenne Java Basics - Anfänger-Themen 8
M in Textfile Strukturen erkennen Java Basics - Anfänger-Themen 5
M Textfile durchlaufen und ersetzen Java Basics - Anfänger-Themen 2
M in Textfile Textphrase ersetzen Java Basics - Anfänger-Themen 13
P Textfile einlesen Java Basics - Anfänger-Themen 8
S Ringbuffer-Speicher mit einem Textfile Java Basics - Anfänger-Themen 2
H Mit JSP in ein Textfile schreiben Java Basics - Anfänger-Themen 2
H Header von Textfile bearbeiten Java Basics - Anfänger-Themen 14
G Stringmaipulation, Textfile einelsen und Suchen und Ersetzen Java Basics - Anfänger-Themen 12
M Textfile in einer JTextArea anzeigen Java Basics - Anfänger-Themen 3
R Textfile vs Serialized Objects Java Basics - Anfänger-Themen 4
A Abspeichern von werten in einer textfile. Java Basics - Anfänger-Themen 2
G wie 'tabs' und 'zeilenumbruch' in textfile einbauen? Java Basics - Anfänger-Themen 5
G Textfile bearbeiten und speichern Java Basics - Anfänger-Themen 3
W Problem mit Konsolenausgabe bei StringTokenizer Java Basics - Anfänger-Themen 2
B StringTokenizer Java Basics - Anfänger-Themen 11
M StringTokenizer macht Quatsch Java Basics - Anfänger-Themen 21
S StringTokenizer; countTokens() Java Basics - Anfänger-Themen 6
J StringTokenizer? Java Basics - Anfänger-Themen 2
V StringTokenizer für Rechenzeichen Java Basics - Anfänger-Themen 12
C StringTokenizer Delimiter " " "??? Java Basics - Anfänger-Themen 2
M java.lang.StringTokenizer Java Basics - Anfänger-Themen 4
X StringTokenizer immer nur ein Zeichen Java Basics - Anfänger-Themen 12
T OOP StringTokenizer, Zuweisung der einzelnen Attribute Java Basics - Anfänger-Themen 21
B Fragen zu StringTokenizer? Java Basics - Anfänger-Themen 8
M String.split() und StringTokenizer Java Basics - Anfänger-Themen 2
G StringTokenizer Java Basics - Anfänger-Themen 4
J StringTokenizer Java Basics - Anfänger-Themen 3
G Array mit Stringtokenizer füllen Java Basics - Anfänger-Themen 2
P StringTokenizer Java Basics - Anfänger-Themen 2
V StringTokenizer Java Basics - Anfänger-Themen 2
P Rexex - stringtokenizer - String funktionen allgemein Java Basics - Anfänger-Themen 3
G Java StringTokenizer Java Basics - Anfänger-Themen 2
D StringTokenizer wirft Exception Java Basics - Anfänger-Themen 9
G StringTokenizer mit unterschiedlichen Delimitern Java Basics - Anfänger-Themen 7
G StringTokenizer - jedem Zeichen einen Bezeichner zuweisen Java Basics - Anfänger-Themen 4
S schwieriger String für StringTokenizer, wie am Besten ? Java Basics - Anfänger-Themen 8
U StringTokenizer soll in String-Array schreiben Java Basics - Anfänger-Themen 19
R StringTokenizer Java Basics - Anfänger-Themen 9
V StringTokenizer Java Basics - Anfänger-Themen 10
S StringTokenizer: Daten aus Datei auslesen Java Basics - Anfänger-Themen 11
S TreeSet und StringTokenizer Java Basics - Anfänger-Themen 6
C StringTokenizer Java Basics - Anfänger-Themen 3
A Problem StringTokenizer mit delimiters Java Basics - Anfänger-Themen 2
N Zeilenumbruch im StringTokenizer?? Java Basics - Anfänger-Themen 4
J StringTokenizer Hilfe !!!!!!!!!!! Java Basics - Anfänger-Themen 5
farbenlos Csv Datei in Java einlesen Java Basics - Anfänger-Themen 18
G JTree speichern und wieder einlesen Java Basics - Anfänger-Themen 5
T Text einlesen code was kommt dahin? Java Basics - Anfänger-Themen 1
S SeriellenPort einlesen Java Basics - Anfänger-Themen 3
I XML einlesen und Objekte bekommen Java Basics - Anfänger-Themen 2
M Daten aus .txt Datei einlesen und weiterverarbeiten Java Basics - Anfänger-Themen 80
julian0507 Wörter einlesen lassen und rückwärts ausgeben Java Basics - Anfänger-Themen 7
S JSON einlesen und benutzen Java Basics - Anfänger-Themen 5
A CSv.Datei einlesen und die werte in zweidemosional Int Array speichern Java Basics - Anfänger-Themen 9
I Ical4j / Kalender einlesen von URL - Fehler: "Unparseable date" Java Basics - Anfänger-Themen 16
Saiko Zeilen einer Datei einlesen Java Basics - Anfänger-Themen 3
sserio Txt Datei einlesen Java Basics - Anfänger-Themen 9
D Strings aus Excel-Datei einlesen Java Basics - Anfänger-Themen 2
julian112 Input/Output .gz bzw. .txt Datei Einlesen und Umgang mit Exceptions Java Basics - Anfänger-Themen 1
M String beim einlesen formatieren Java Basics - Anfänger-Themen 12
P Datei einlesen, nach Begriff filtern und in Datei ausgeben. Problem Standardausgabe über Konsole Java Basics - Anfänger-Themen 19
G JSP Textfeld einlesen Java Basics - Anfänger-Themen 2
M Einlesen > new Leser Java Basics - Anfänger-Themen 5
W Werte durch Konsole einlesen Java Basics - Anfänger-Themen 10
A Array einlesen und ausgeben Java Basics - Anfänger-Themen 13
K Datum einlesen und Tag, Monat und Jahr einzeln ausgeben Java Basics - Anfänger-Themen 1
K Datum einlesen und Tag, Monat und Jahr einzeln ausgeben Java Basics - Anfänger-Themen 1
KogoroMori21 Textdatei einlesen im Array (Selection Sort Algorithmus) Java Basics - Anfänger-Themen 3
S Wort einlesen Array ausgeben Java Basics - Anfänger-Themen 4
I Java String einlesen und auslesen Java Basics - Anfänger-Themen 11
A Input/Output Mehrere Csv-Dateien einlesen Java Basics - Anfänger-Themen 2
S CSV einlesen und mit Komma trennen Java Basics - Anfänger-Themen 12
CptK Richtigen Pfad beim einlesen von Datei finden Java Basics - Anfänger-Themen 2
I Java-Wort einlesen und ausgeben Java Basics - Anfänger-Themen 7
J Csv-Datei einlesen Java Basics - Anfänger-Themen 52
JD_1998 Arrays einlesen, zwischenspeichern und wieder ausgeben Java Basics - Anfänger-Themen 8
L Konstruktor für eine Map-Datei/Map-Datei einlesen Java Basics - Anfänger-Themen 5
L Datein einlesen Java Basics - Anfänger-Themen 1
O zufälliges Wort aus einer Datei einlesen Java Basics - Anfänger-Themen 32
E Input/Output Datei anhand von Dateinamen einlesen Java Basics - Anfänger-Themen 5
C Datei über relative Pfade einlesen Java Basics - Anfänger-Themen 6
A Input/Output Dateien einlesen und ausgeben Java Basics - Anfänger-Themen 7
A Klasse um daten zu einlesen Java Basics - Anfänger-Themen 26
A 2d Arrays aus txt.file einlesen Java Basics - Anfänger-Themen 16
A Textdatei mit stream einlesen Java Basics - Anfänger-Themen 2
P Datei einlesen und zurückgeben Java Basics - Anfänger-Themen 5
G String wird nach Einlesen aus Datei nicht erkannt Java Basics - Anfänger-Themen 3
M String in Scanner einlesen Java Basics - Anfänger-Themen 6
E TXT FILE EINLESEN Java Basics - Anfänger-Themen 4
M Einzelzeichen einlesen Java Basics - Anfänger-Themen 2

Ähnliche Java Themen

Neue Themen


Oben