Variablen Replace funktioniert nicht

Ananaskirsche

Aktives Mitglied
Hallo,
Ich habe eine Prozedur geschrieben:
Java:
String Output = Input.replace("joinMessage: ", "");

Input ist zu diesem Zeitpunkt "joinMessage: {player} joined the server" und als Output bekomm ich "{player} joined the server".

nun habe ich genau das selbe:
Java:
String Output = Input.replace("quitMessage: ", "");

Input ist zu diesem Zeitpunkt "quitMessage: {player} left the server" und als Output sollte ich bekommen "{player} left the server" aber stattdessen bekomme ich eine NPE und ich weiß nicht warum, zumal es ja bei der joinMessage funktioniert.
 

knilch

Bekanntes Mitglied
Hi,
Ich vermute mal, dass die INPUT- Instanz schon null ist, und du auf dieser Instanz die replace Methode aufrufst... Schliesst du irgendwo vorher die Verbindung oder so? Kannst du mal den code posten?

Gruss knilch
 
Zuletzt bearbeitet:

Ananaskirsche

Aktives Mitglied
Java:
package filehandler;

import java.io.*;

public class TeamConfig
{
	//Erstellen der Virtuellen Datei
	private static String f = File.separator;
	private static File foulder = new File("plugins" + f + "ServerTeam");
	private static File teamFile = new File("plugins" + f + "ServerTeam" + f + "team.yml");
	
	//Erstellen der Output-Strings
	private String Input;
	private String Output;
	
	
	public String requestString(String request)
	{
		checkFile();
		try
		{
			//Erstellen der Reader
			FileReader reader = new FileReader(teamFile);
			BufferedReader r = new BufferedReader(reader);
			
			//Erstellen der Variable mit Zeilennummer
			byte zeile = 0;
			
			//Ertsellen des Zeilenzählers
			byte line = 0;
			
			
			
			//Bei den Zeilen immer noch 2 draufaddieren weil 2 Zeilen am Anfang hadder sind
			if(request == "Owner")
			{
				zeile = 3;
			}
			else if(request == "Admin")
			{
				zeile = 4;
			}
			else if(request == "Moderator")
			{
				zeile = 5;
			}
			else if(request == "Supporter")
			{
				zeile = 6;
			}
			else if(request == "Text")
			{
				zeile = 7;
			}
			
			
			//line wird so lange erhöht bis sie zeile entspricht
			while((Input = r.readLine()) != null)
			{
				line++;
				if(zeile == line)
				{
					r.close();
					break;
				}
				
			}
			
			//Filtert das passende Prefix aus dem Dateiinhalt raus um nur die eingabe des Users zu erhalten
			if(request == "Owner")
			{
				Output = Input.replace("Owner: ", "");
			}
			else if(request == "Admin")
			{
				Output = Input.replace("Admin: ", "");
			}
			else if(request == "Moderator")
			{
				Output = Input.replace("Moderator: ", "");
			}
			else if(request == "Supporter")
			{
				Output = Input.replace("Supporter: ", "");
			}
			else if(request == "Text")
			{
				Output = Input.replace("Text: ", "");
			}
		}
		catch(IOException ex)
		{
			System.err.println("[ServerTeam]Could not read out team.yml");
		}
		
		
		return Output;
	}
	
	
	
	public void checkFile()
	{
		if(!teamFile.exists() || !teamFile.isFile())
		{
			try
			{
				//Erstellen der Datei
				foulder.mkdirs();
				teamFile.createNewFile();
				
				FileWriter writer = new FileWriter(teamFile);
				BufferedWriter w = new BufferedWriter(writer);
				
				w.write("#==========[SERVERTEAM]==========\n");
				w.write("You HAVE to leave one space between the : and your names (e.g. Admin: Ananaskirsche)\n");
				w.write("Owner: No Owner\n");
				w.write("Admin: No Admin\n");
				w.write("Moderator: No Moderator\n");
				w.write("Supporter: No Supporter\n");
				w.write("Text: No Text");
				
				w.flush();
				w.close();
			}
			catch(IOException ex)
			{
				System.err.println("[ServerTeam] Could not create out team.yml");
			}
		}
//		else
//		{
//			System.out.println("[ServerTeam] team.yml exists");
//		}
	}
}


Ich muss noch anfügen dass Ich die falsche Methode genommen habe. Dies funktioniert:
Java:
if(request == "Owner")
			{
				Output = Input.replace("Owner: ", "");
			}
			else if(request == "Admin")
			{
				Output = Input.replace("Admin: ", "");
			}

Dies nicht mehr:
Java:
else if(request == "Moderator")
			{
				Output = Input.replace("Moderator: ", "");
			}
			else if(request == "Supporter")
			{
				Output = Input.replace("Supporter: ", "");
			}
			else if(request == "Text")
			{
				Output = Input.replace("Text: ", "");
			}

Wahrscheinlich ist das einer meiner Dummheitsfehler die man so einbaut wenn man Nachts coded ;)
 

knilch

Bekanntes Mitglied
Hi,
In der while- Schleife:
Java:
            //line wird so lange erhöht bis sie zeile entspricht
            while((Input = r.readLine()) != null)
            {
                line++;
                if(zeile == line)
                {
                    r.close();
                    break;
                }
               
            }
wird solange gelesen, bis (zeile == line) true ist. Dann hat INPUT der Wert, der von readLine eingelesen wurde.
Wenn aber zeile != line ist. dann wird so lange die readLine Methode angewandt, wie es Zeilen in der Stream hat. Wenn dann while beendet wird (d.h. nie zeile == line eingetroffen ist), dann ist INPUT NULL. (siehe readLine()) Methode: BufferedReader (Java Platform SE 7 ).
Dann willst du auf der Instanz INPUT die replace- Methode anwenden und bekommst NPE.

Bei allen Vergleichen von request
Java:
            if(request == "Owner")
            {
                zeile = 3;
            }
            else if(request == "Admin")
            {
                zeile = 4;
            }
            else if(request == "Moderator")
            {
                zeile = 5;
            }
            else if(request == "Supporter")
            {
                zeile = 6;
            }
            else if(request == "Text")
            {
                zeile = 7;
            }
und auch dem weiteren verwenden von request solltest du besser
Java:
request.equals("Text")
anwenden. Dies ist besser als der Vergleich mit "=="
Um das Problem mit der NPE zu beheben, musst du den Code so umschreiben, dass der Zugriff auf die INPUT- Instanz anders gelöst wird.

Zusätzlich ist noch zu erwähnen, dass br nur geschlossen wird, wenn (zeile == line). Dies darf nicht sein. br muss spätestens beim verlassen der Methode geschlossen werden, damit die FilePointer wieder freigegeben werden. Ansonsten bekommst du Probleme, wenn du wieder auf die Datei zugreifen möchtest, solange das Programm läuft.

Gruss knilch
 
Zuletzt bearbeitet:

Ananaskirsche

Aktives Mitglied
So wie ich dass sehe würde es doch reichen wenn ich einfach in die if-Verzweigung der while-Schleife schreibe

Java:
Input = r.readLine();

Oder meinst du dass ich das ganze aus der Datei anders auslesen muss?
 
Zuletzt bearbeitet:

knilch

Bekanntes Mitglied
Hi,
Das ändert nichts. im while- Kopf steht INPUT = r.readLine() . hier wird die Line gelesen und dann der Variable INPUT zugewiesen. Wenn r.readLine() am Ende des stream angekommen ist, dann ist die Rückgabe von r.readLine() --> NULL. Diese wird dann an die Variable INPUT zugewiesen. Anschliessend wird überprüft INPUT != null --> diese ist false, also wird der while- Loop verlassen. Die Variable INPUT ist dann immer NULL. Die Variable INPUT wird nur einen wert haben, wenn der while- Loop abgebrochen wird. d.h. zeile == line.
 
Zuletzt bearbeitet:

Ananaskirsche

Aktives Mitglied
:idea:

Danke, hab's jetzt verstanden. Da ich ja weiß welche benötigte Information in welcher Zeile steht, wäre es möglich das Problem mit dem LineNumberReader zu lösen, wenn ja wäre ein Beispiel freundlich.

Parallel dazu werde ich natürlich auch googlen und gucken ;)

Aber danke schonmal für deine Hilfe und Erklärung
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
S string.replace funktioniert nicht Java Basics - Anfänger-Themen 10
I replace(char, char) funktioniert nicht Java Basics - Anfänger-Themen 8
H replace funktioniert nicht Java Basics - Anfänger-Themen 4
H String-Operation replace() - Zeichenkette verdoppeln Java Basics - Anfänger-Themen 2
F Kurze Frage zu replace() Java Basics - Anfänger-Themen 19
monsterherz Replace mit Scan Java Basics - Anfänger-Themen 20
monsterherz replace Java Basics - Anfänger-Themen 12
GAZ String replace() Elemente tauschen Java Basics - Anfänger-Themen 13
J Replace mit Hilfe von ArrayLists Java Basics - Anfänger-Themen 6
Dimax Erste Schritte String replace alle Zeichen Java Basics - Anfänger-Themen 10
M Verschlüsselung mit replace() Java Basics - Anfänger-Themen 35
F Buchstaben in einem String vertauschen (Ohne replace) Java Basics - Anfänger-Themen 10
D kann man vor dem CSVRecord, replace Anweisung anwenden ? Java Basics - Anfänger-Themen 2
M replace Methode für Buchstaben Java Basics - Anfänger-Themen 29
J .replace mit Arraylisten Java Basics - Anfänger-Themen 4
B Regular Expression bei replace Java Basics - Anfänger-Themen 11
M Problem mit Array und replace Java Basics - Anfänger-Themen 3
P Replace zählen Java Basics - Anfänger-Themen 4
P replace[Frage] Java Basics - Anfänger-Themen 2
V String replace ? Java Basics - Anfänger-Themen 6
J Erste Schritte replace von minus Zeichen wird nicht gemacht Java Basics - Anfänger-Themen 7
U String.replace mit Umlauten Java Basics - Anfänger-Themen 14
N Methoden mehrere replace hintereinander geht nicht ? Java Basics - Anfänger-Themen 2
R String Replace für JUnit Java Basics - Anfänger-Themen 19
M Replace mit fromIndex Java Basics - Anfänger-Themen 6
V Nochmal Hilfe - Replace Methode Java Basics - Anfänger-Themen 2
B Problem mit replace() Java Basics - Anfänger-Themen 4
0 String split und replace geht nicht Java Basics - Anfänger-Themen 17
A mehrere replace in einem string Java Basics - Anfänger-Themen 3
S String filtern mit replace -> Problem Java Basics - Anfänger-Themen 6
T Regulärer Ausruck mit replace Java Basics - Anfänger-Themen 3
M String.replace Java Basics - Anfänger-Themen 2
M replace html string Java Basics - Anfänger-Themen 3
G String.replace Java Basics - Anfänger-Themen 3
J Find and replace Java Basics - Anfänger-Themen 3
D Strings : XY.replace(); ! Java Basics - Anfänger-Themen 6
D String mit replace bearbeiten Java Basics - Anfänger-Themen 2
G string.replace und charset Java Basics - Anfänger-Themen 2
D Probleme mit der String Methode replace() Java Basics - Anfänger-Themen 4
N String.replace brauch mal Hilfe Java Basics - Anfänger-Themen 2
B Programmcode von replace, split, u.s.w. Java Basics - Anfänger-Themen 3
F Schon wieder replace Java Basics - Anfänger-Themen 7
W Replace - geht das auch kürzer? Java Basics - Anfänger-Themen 4
N replace? Java Basics - Anfänger-Themen 5
R String replace nicht verwenden.alternative gesucht Java Basics - Anfänger-Themen 5
P Replace java 1.1 Java Basics - Anfänger-Themen 4
D replace() Methode in JSP Java Basics - Anfänger-Themen 2
D replace-funktion Java Basics - Anfänger-Themen 2
I Webservice funktioniert nicht Java Basics - Anfänger-Themen 5
C Abbruch einer Schleife mit break, meine Übung funktioniert nicht richtig Java Basics - Anfänger-Themen 4
S Erstes Programm: Hallo Welt funktioniert nicht. Java Basics - Anfänger-Themen 3
J Datenüberwachung funktioniert nicht Java Basics - Anfänger-Themen 9
mo13 JTextField funktioniert nicht Java Basics - Anfänger-Themen 4
J .jar datei öffnen funktioniert nicht Java Basics - Anfänger-Themen 17
G Mit jPackage erstellte EXE funktioniert nicht Java Basics - Anfänger-Themen 2
G Robot funktioniert nicht bei SelectionListener Java Basics - Anfänger-Themen 6
R RegEx funktioniert nicht Java Basics - Anfänger-Themen 14
S 2 Reihen ratio-btn, eine Reihe funktioniert andere nicht Java Basics - Anfänger-Themen 4
monsterherz Punkt Notation funktioniert nicht Java Basics - Anfänger-Themen 4
N Programm Funktioniert mit .txt Datei aber nicht mit .rtf Datei Java Basics - Anfänger-Themen 2
D Quellcode für cmd funktioniert nicht Java Basics - Anfänger-Themen 9
ms_cikar Bin to Float convertieren funktioniert nicht Java Basics - Anfänger-Themen 24
B Schrankensystem mit Farberkennung für Flashgame funktioniert nicht wie geplant Java Basics - Anfänger-Themen 4
I Greenscreen, funktioniert nicht zu 100%... nicht alle Pixel werden geändert Java Basics - Anfänger-Themen 1
JordenJost char variable funktioniert irgendwie nicht a+b ergibt nicht à Java Basics - Anfänger-Themen 4
M Operatoren Strings mit Vergleichsoperatoren, funktioniert das? Java Basics - Anfänger-Themen 9
Garrit1994 Continue funktioniert nicht wie geplant Java Basics - Anfänger-Themen 4
B Methoden Übergebe Variabel funktioniert nicht Java Basics - Anfänger-Themen 17
P exportiertes Programm funktioniert nur teilweise Java Basics - Anfänger-Themen 7
Agent4nobody Programmstart durch aufruf des interpreters funktioniert nicht Java Basics - Anfänger-Themen 14
Fugover Programm funktioniert nicht Java Basics - Anfänger-Themen 11
X Datentypen String.equals funktioniert nicht Java Basics - Anfänger-Themen 5
berserkerdq2 wie funktioniert contenthandler, was muss ich bei der Methode startElement und endElement tun? Java Basics - Anfänger-Themen 11
Alen123 Warum funktioniert mein Code nicht? Java Basics - Anfänger-Themen 64
sserio Array funktioniert nicht Java Basics - Anfänger-Themen 2
sserio Wieso funktioniert mein Programm nicht Java Basics - Anfänger-Themen 2
A String split funktioniert nicht, wenn mehr als 1 Ziffer vor dem Zeichen steht nach dem er trennen soll? Java Basics - Anfänger-Themen 4
sserio Größtes Palindrom-Produkt Programm funktioniert nur halb Java Basics - Anfänger-Themen 23
sserio Rekursion größten Primfaktor finden funktioniert nicht Java Basics - Anfänger-Themen 8
sserio Wieso funktioniert mein TableView nicht /JavaFX. Java Basics - Anfänger-Themen 4
Avalon Warum funktioniert eine Bedingung und eine andere nicht? Java Basics - Anfänger-Themen 2
J Datentypen String in File konvertieren funktioniert nicht Java Basics - Anfänger-Themen 4
U Wie genau funktioniert der ! Operator Java Basics - Anfänger-Themen 3
stormyark 4 Bit in einer for-schleife funktioniert nicht Java Basics - Anfänger-Themen 3
J Nach dem Exportieren funktioniert mein Programm nicht mehr Java Basics - Anfänger-Themen 8
M Java printf(Locale.... funktioniert nicht Java Basics - Anfänger-Themen 3
N Wieso funktioniert die Deklaration nicht Java Basics - Anfänger-Themen 3
C Long value an Stringbuilder übergeben, equals Methode funktioniert nicht Java Basics - Anfänger-Themen 2
districon Backtracking funktioniert nicht ganz Java Basics - Anfänger-Themen 3
H Array rückwärts auslesen funktioniert nicht Java Basics - Anfänger-Themen 3
S Math.random funktioniert nicht Java Basics - Anfänger-Themen 5
S Schleife funktioniert nicht Java Basics - Anfänger-Themen 2
B Ausgabe in TextArea funktioniert nicht Java Basics - Anfänger-Themen 2
Henri Webservice Delete und Update Methode funktioniert nicht Java Basics - Anfänger-Themen 27
J ActionListener von JCheckBox im Knoten von JTree funktioniert nicht Java Basics - Anfänger-Themen 2
C System.out.println - Parameterübergabe funktioniert nicht Java Basics - Anfänger-Themen 2
JD_1998 Hilfsmethode if return funktioniert nicht Java Basics - Anfänger-Themen 2
C JButton Text 2 Mal ändern funktioniert nicht Java Basics - Anfänger-Themen 8
T % funktioniert nicht Java Basics - Anfänger-Themen 2
D e(fx)clipse installieren funktioniert nicht Java Basics - Anfänger-Themen 3

Ähnliche Java Themen

Neue Themen


Oben