null in String replacen

Nilsy8214

Aktives Mitglied
Also wenn ich ein String habe in dem vor dem eigentlichen inhalt Null kommt wie kann ich das daraus entfernen weil wenn ich replace() verscuhe kommt ein error das ich nicht Null replacen kann also gibt es da einen anderen weg oder muss ich versuchen das Null da erst garnicht rein kommt
 
K

kneitzel

Gast
null ist kein String sondern die null Reference. Somit existiert keine String Instanz, auf der Du etwas aufrufen kannst.

Alles was Du machen kannst, ist der String Variablen ein neuen String zuzuweisen.

Und an der Stelle auch noch interessant: Strings sind immutable. Das bedeutet, dass Du keinen String verändern kannst und es kann daher nur darauf hinaus laufen, dass Du der String Variablen einen neuen String zuweist. (String.Replace verändert somit den String nicht sondern gibt einen neuen String zurück.)
 

mihe7

Top Contributor
Ich glaube, er meint etwas wie:

Java:
String str = "" + null + "XY";
System.out.println(str);
str = str.replace("null", "whatever");
System.out.println(str);
 

Oneixee5

Top Contributor
Seit Java 8 kann man in solchen Fälle auch Optional verwenden, um einen Ersatz für null zu plazieren, wenn man eine String zusammenbaut.
[CODE lang="java" title=""] final String myString = null;
final String otherString = String.format("%s XY", Optional.ofNullable(myString).orElse("unbekannt"));

System.out.println(otherString);
[/CODE]
 
K

kneitzel

Gast
Kannst du einfach mal zeigen, was genau du machst, welche Werte genau in den Variablen sind und was du genau machen willst?
 

mihe7

Top Contributor
aber es ist ja so das nach den null noch text kommt es ist nur in der Ausgabe dann scglecht weil dann so ein Null Zeichen davor ist
Das ist nicht zum Ersetzen des Teilstrings "null" in einem gegebenen String gedacht (dazu siehe #3).

Die Beispiele ab Kommentar #4 dienen dazu, einen String aus ggf. Nullreferenzen zu bauen.

Zur Erklärung:
String.format("%s XY", myString == null ? "unbekannt" : myString);

Hier wird der ternäre Operator verwendet: bedingung ? ausdruckWahr : ausdruckFalsch. Das Ergebnis des gesamten Ausdrucks ist ausdruckWahr, wenn die bedingung zutrifft, ausdruckFalsch sonst.

Im konkreten Fall wird der Ausdruck myString == null ? "unbekannt" : myString also "unbekannt" liefern, wenn myString == null gilt, ansonsten myString.

Durch das String.format wird nun ein formatierter String erzeugt, der aus dem Ergebnis des eben beschriebenen Audrucks, gefolgt von einem Leerzeichen und XY besteht.

D. h. die komplette Zeile liefert "unbekannt XY", wenn myString == null gilt, sonst die Verkettung von myString mit " XY".
 

Nilsy8214

Aktives Mitglied
Kannst du einfach mal zeigen, was genau du machst, welche Werte genau in den Variablen sind und was du genau machen willst?
Also es ist so ich habe eine File mit halt dingen untereinander aufgelistet wenn ich dann soll eine Zeile gelöscht werden daas passiert so

Java:
 try {
                        String lessonFileContents02 = new String();
                        int a = 0;
                        Scanner lessonFileScanner02 = new Scanner(Path.of("src\\Lessons.txt"));
                        while (lessonFileScanner02.hasNextLine()) {

                            if (a != numberOfLesson.get()) {
                                lessonFileContents02 += lessonFileScanner02.nextLine()+"\n";

                            } else {

                                lessonFileScanner02.nextLine();
                            }
                            a++;

                        }
                        if(lessonFileContents02.length()>0) {




                            printForDel(lessonFileContents02);

                          
                        }
                    } catch (IOException e) {
                        e.printStackTrace();
                    }

dann die methode printForDel ist

Java:
public void printForDel(String FileContent) throws IOException {

    File lessonFile03 = new File("src\\Lessons.txt");
    PrintWriter lessonsFilepw03 = new PrintWriter(new FileWriter(lessonFile03));

    lessonsFilepw03.print(FileContent);
    lessonsFilepw03.flush();
    lessonsFilepw03.close();
}

bis dahin geht auch alles wenn ich jetzt aber etwas der File wieder Hinzufügen will

Java:
lessonsFilepw.println("text");
                lessonsFilepw.flush();
dann stehen davor null's
 
K

kneitzel

Gast
Ich verstehe das immer noch nicht so richtig. Du hast lessonsFilepw03 doch bereits geschlossen mittels close(), daher solltest Du da auch nichts mehr rein schreiben können.

Daher wäre es super, wenn Du vielleicht einmal eine Art minimales Beispiel zeigen kannst, das Du komplett posten kannst und das das Problem aufzeigt. Denn zumindest ich sehe hier jetzt außer dem angesprochenen Punkt, nichts anderes.
 

Nilsy8214

Aktives Mitglied
Ich verstehe das immer noch nicht so richtig. Du hast lessonsFilepw03 doch bereits geschlossen mittels close(), daher solltest Du da auch nichts mehr rein schreiben können.

Daher wäre es super, wenn Du vielleicht einmal eine Art minimales Beispiel zeigen kannst, das Du komplett posten kannst und das das Problem aufzeigt. Denn zumindest ich sehe hier jetzt außer dem angesprochenen Punkt, nichts anderes.
also ich starte das Programm und in einem Fenster drücke ich einen Knopf der dann in der Datei, "text" schreibt das kann ich dann immer machen und es kommt immer untereinander text wenn ich dann auf einen Knopf drücke der eine Zeile löschen soll geht das auch wenn ich dann aber wieder "text" schreiben will passiert das

Unbenannt.PNG

meintest du das mit Beispiel oder was anderens?
 
K

kneitzel

Gast
Ein kompletter Code, den wir auch ausführen können und der das Problem zeigt. Der Code (das Beispiel) muss komplett sein aber dabei so weit abgespeckt wie irgendwie möglich.
 

Nilsy8214

Aktives Mitglied
Ein kompletter Code, den wir auch ausführen können und der das Problem zeigt. Der Code (das Beispiel) muss komplett sein aber dabei so weit abgespeckt wie irgendwie möglich.
das ist in javafx

Java:
import javafx.application.Application;


import javafx.beans.property.IntegerProperty;
import javafx.beans.property.SimpleIntegerProperty;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.Label;

import javafx.scene.control.TextField;
import javafx.scene.layout.Pane;
import javafx.scene.shape.Rectangle;
import javafx.scene.text.Font;
import javafx.stage.Stage;




import javafx.event.EventHandler;

import javafx.scene.input.MouseEvent;



import java.io.*;


import java.nio.file.Path;

import java.util.Scanner;


public class Main extends Application {
    Button testbutton = new Button();


    Pane rootEdit = new Pane();
    Pane rootForStartScreen = new Pane();
    Pane rootFLSS = new Pane();

    Label labelForSelectedLessons = new Label();
    Label labelForLesson = new Label();

    Rectangle rectangleFor__UN__SelectedLesson = new Rectangle();
    Rectangle rectangleForSelectedLesson = new Rectangle();

    Button buttonStartLesson = new Button("Start Lesson");
    Button buttonSelectLesson = new Button("Select Lesson");
    Button newLessonButton = new Button("new Lesson");
    Button backButton = new Button("<-----");
    Button editButton = new Button("Edit");
    Button buttonLessonsUP = new Button("UP");
    Button buttonLessonsDOWN = new Button("DOWN");

    Button SaveNameButton = new Button("Save");
    Button deleteButton = new Button("Delete Lesson");

    TextField changeLessonName = new TextField();



    @Override
    public void start(Stage stage) throws Exception {
        //double for sceensize
        int screenwidth = 500;
        int screenheight = 500;



        //STARTSCREEN



        //Button buttonStartLesson


        // Größe
        buttonStartLesson.prefHeightProperty().bind(rootForStartScreen.heightProperty().divide(4));
        buttonStartLesson.prefWidthProperty().bind(rootForStartScreen.widthProperty().divide(2));
        // Position
        buttonStartLesson.layoutXProperty().bind(rootForStartScreen.widthProperty().divide(2).subtract(rootForStartScreen.widthProperty().divide(4)));
        buttonStartLesson.layoutYProperty().bind(rootForStartScreen.heightProperty().divide(4).subtract(rootForStartScreen.heightProperty().divide(8)));


        //Button buttonSelectLesson





        // Größe
        buttonSelectLesson.prefHeightProperty().bind(rootForStartScreen.heightProperty().divide(4));
        buttonSelectLesson.prefWidthProperty().bind(rootForStartScreen.widthProperty().divide(2));
        // Position
        buttonSelectLesson.layoutXProperty().bind(rootForStartScreen.widthProperty().divide(2).subtract(rootForStartScreen.widthProperty().divide(4)));
        buttonSelectLesson.layoutYProperty().bind(rootForStartScreen.heightProperty().divide(2).add(rootForStartScreen.heightProperty().divide(8)));



        // add buttons
        rootForStartScreen.getChildren().add(buttonStartLesson);
        rootForStartScreen.getChildren().add(buttonSelectLesson);


        Scene scene = new Scene(rootForStartScreen,screenwidth,screenheight);

        stage.setTitle("Vookabeln");
        stage.setScene(scene);
        stage.show();
        //STARTSCREENEND

        //SELECTLESSON

        //Button new Lesson

        //Größe
        newLessonButton.prefHeightProperty().bind(rootFLSS.heightProperty().divide(12));
        newLessonButton.prefWidthProperty().bind(rootFLSS.widthProperty().divide(2));
        //position
        newLessonButton.layoutYProperty().bind(rootFLSS.heightProperty().divide(1.2));
        newLessonButton.layoutXProperty().bind(rootFLSS.widthProperty().divide(4));


        //Button Back

        //Größe
        backButton.prefHeightProperty().bind(scene.heightProperty().divide(15));
        backButton.prefWidthProperty().bind(scene.widthProperty().divide(7.5));
        //Position
        backButton.layoutYProperty().bind(scene.heightProperty().divide(30));
        backButton.layoutXProperty().bind(scene.widthProperty().divide(30));







        //Speicher der Lessons
        String lessonFileContents = new String();
        Scanner lessonFileScanner = new Scanner(Path.of("src\\Lessons.txt"));
        while (lessonFileScanner.hasNextLine()){

            lessonFileContents +=lessonFileScanner.nextLine()+"\n";



        }


        File lessonsFile = new File("src\\Lessons.txt");
        PrintWriter lessonsFilepw = new PrintWriter(new FileWriter(lessonsFile));


        lessonsFilepw.print(lessonFileContents);
        lessonsFilepw.flush();







        //Grünes Viereck zum auswählen der Lesson




        //Label For Selectedlessons

        //Größe
        labelForSelectedLessons.prefHeightProperty().bind(rootFLSS.heightProperty().divide(6));
        labelForSelectedLessons.prefWidthProperty().bind(rootFLSS.widthProperty().divide(2));
        //Position
        labelForSelectedLessons.layoutXProperty().bind(rootFLSS.widthProperty().divide(4));
        labelForSelectedLessons.layoutYProperty().bind(rootFLSS.heightProperty().divide(3).subtract(rootFLSS.heightProperty().divide(6)));
        //text
        labelForSelectedLessons.setText(textForSelectedLabel(0));
        //Label For lessons


        //Größe

        labelForLesson.prefWidthProperty().bind(rootFLSS.widthProperty().divide(2));
        labelForLesson.prefHeightProperty().bind(rootFLSS.heightProperty().divide(2));
        //Schriftgröße

        // Border

        rectangleFor__UN__SelectedLesson.heightProperty().bind(rootFLSS.heightProperty().divide(2));
        rectangleFor__UN__SelectedLesson.layoutYProperty().bind(rootFLSS.heightProperty().divide(3));




        //Buttons lessons wechseln


        buttonLessonsUP.prefWidthProperty().bind(rootFLSS.widthProperty().divide(10));
        buttonLessonsUP.prefHeightProperty().bind(rootFLSS.heightProperty().divide(10));

        buttonLessonsUP.layoutXProperty().bind(rectangleForSelectedLesson.layoutXProperty().add(rectangleForSelectedLesson.widthProperty()));
        buttonLessonsUP.layoutYProperty().bind(rectangleFor__UN__SelectedLesson.layoutYProperty());

        buttonLessonsDOWN.prefWidthProperty().bind(rootFLSS.widthProperty().divide(10));
        buttonLessonsDOWN.prefHeightProperty().bind(rootFLSS.heightProperty().divide(10));

        buttonLessonsDOWN.layoutXProperty().bind(rectangleForSelectedLesson.layoutXProperty().add(rectangleForSelectedLesson.widthProperty()));
        buttonLessonsDOWN.layoutYProperty().bind(rectangleFor__UN__SelectedLesson.layoutYProperty().add(rectangleFor__UN__SelectedLesson.heightProperty().subtract(buttonLessonsDOWN.heightProperty())));




        rectangleForSelectedLesson.layoutYProperty().bind(rootFLSS.heightProperty().divide(3).subtract(rootFLSS.heightProperty().divide(6)));

        //Position
        labelForLesson.layoutXProperty().bind(rootFLSS.widthProperty().divide(4));
        labelForLesson.layoutYProperty().bind(rootFLSS.heightProperty().divide(3));
        //Text

        labelForLesson.setText(textFor__UN__SelectedLabel(0));

        IntegerProperty numberOfLesson = new SimpleIntegerProperty();

        //text Feld change Lesson name
        changeLessonName.layoutYProperty().bind(scene.heightProperty().divide(30).add(scene.heightProperty().divide(15).divide(2)));
        changeLessonName.layoutXProperty().bind(scene.widthProperty().divide(2).subtract(changeLessonName.widthProperty().divide(2)));

        changeLessonName.prefWidthProperty().bind(scene.widthProperty().divide(3));







        //Edit button



        editButton.prefHeightProperty().bind(rootFLSS.heightProperty().divide(10));
        editButton.prefWidthProperty().bind(rootFLSS.widthProperty().divide(10));

        editButton.layoutYProperty().bind(rectangleForSelectedLesson.layoutYProperty().add(rectangleForSelectedLesson.heightProperty()
                .divide(2).subtract(editButton.heightProperty().divide(2))));

        editButton.layoutXProperty().bind(rectangleForSelectedLesson.layoutXProperty().add(rectangleForSelectedLesson.widthProperty()));

        //testButton
        testbutton.prefWidthProperty().bind(scene.widthProperty().divide(10));
        testbutton.prefHeightProperty().bind(scene.heightProperty().divide(10));

        testbutton.layoutXProperty().bind(scene.widthProperty().subtract(testbutton.widthProperty()));

        //Save Lesson Name

        SaveNameButton.prefHeightProperty().bind(scene.heightProperty().divide(10));
        SaveNameButton.prefWidthProperty().bind(scene.widthProperty().divide(10));

        SaveNameButton.layoutXProperty().bind(scene.widthProperty().divide(2).add(changeLessonName.widthProperty().divide(2).add(SaveNameButton.widthProperty().divide(3))));
        SaveNameButton.layoutYProperty().bind(changeLessonName.layoutYProperty().add(changeLessonName.heightProperty().divide(2).subtract(SaveNameButton.heightProperty().divide(2))));


        //Delete Button
        deleteButton.prefWidthProperty().bind(scene.widthProperty().divide(5));
        deleteButton.prefHeightProperty().bind(scene.heightProperty().divide(10));

        deleteButton.layoutXProperty().bind(scene.widthProperty().subtract(deleteButton.widthProperty()));
        deleteButton.layoutYProperty().bind(scene.heightProperty().subtract(deleteButton.heightProperty()));

        rootFLSS.heightProperty().addListener((observableValue, number, t1) ->{
                    if(scene.getHeight() <= scene.getWidth()){
                        rectangleFor__UN__SelectedLesson.heightProperty().bind(rootFLSS.heightProperty().divide(2).subtract(getborderpx((double) t1)));
                        rectangleFor__UN__SelectedLesson  .widthProperty().bind(rootFLSS.widthProperty().divide(2).add(getborderpx((double)t1)*2));
                        rectangleFor__UN__SelectedLesson.layoutXProperty().bind(rootFLSS.widthProperty().divide(4).subtract(getborderpx((double) t1)));
                        rectangleFor__UN__SelectedLesson.setStyle("-fx-fill: transparent;-fx-stroke: blue;-fx-stroke-width: "+getborderpx((double) t1)+";");

                        rectangleForSelectedLesson.heightProperty().bind(rootFLSS.heightProperty().divide(6).subtract(getborderpx((double) t1)));
                        rectangleForSelectedLesson  .widthProperty().bind(rootFLSS.widthProperty().divide(2).add(getborderpx((double)t1)*2));
                        rectangleForSelectedLesson.layoutXProperty().bind(rootFLSS.widthProperty().divide(4).subtract(getborderpx((double) t1)));
                        rectangleForSelectedLesson.setStyle("-fx-fill: transparent;-fx-stroke: blue;-fx-stroke-width: "+getborderpx((double) t1)+";");
                        labelForSelectedLessons.setFont(Font.loadFont(getClass().getResourceAsStream("Anonymous/Anonymous.ttf"),getlessonFont(t1)));
                        labelForLesson.setFont(Font.loadFont(getClass().getResourceAsStream("Anonymous/Anonymous.ttf"),getlessonFont(t1)));


                    }

                }
        );
        rootFLSS.widthProperty().addListener((observableValue, number, t1) ->{
                    if(scene.getWidth() <= scene.getHeight()){
                        rectangleFor__UN__SelectedLesson.heightProperty().bind(rootFLSS.heightProperty().divide(2).subtract(getborderpx((double) t1)));
                        rectangleFor__UN__SelectedLesson  .widthProperty().bind(rootFLSS.widthProperty().divide(2).add(getborderpx((double)t1)*2));
                        rectangleFor__UN__SelectedLesson.layoutXProperty().bind(rootFLSS.widthProperty().divide(4).subtract(getborderpx((double) t1)));
                        rectangleFor__UN__SelectedLesson.setStyle("-fx-fill: transparent;-fx-stroke: blue;-fx-stroke-width: "+getborderpx((double) t1)+";");

                        rectangleForSelectedLesson.heightProperty().bind(rootFLSS.heightProperty().divide(6).subtract(getborderpx((double) t1)));
                        rectangleForSelectedLesson.widthProperty().bind(rootFLSS.widthProperty().divide(2).add(getborderpx((double)t1)*2));
                        rectangleForSelectedLesson.layoutXProperty().bind(rootFLSS.widthProperty().divide(4).subtract(getborderpx((double) t1)));
                        rectangleForSelectedLesson.setStyle("-fx-fill: transparent;-fx-stroke: blue;-fx-stroke-width: "+getborderpx((double)t1)+";");
                        labelForSelectedLessons.setFont(Font.loadFont(getClass().getResourceAsStream("Anonymous/Anonymous.ttf"),getlessonFont(t1)));
                        labelForLesson.setFont(Font.loadFont(getClass().getResourceAsStream("Anonymous/Anonymous.ttf"),getlessonFont(t1)));

                    }


                }
        );














        //SELECTLESSONEND


//Button Funktion
        testbutton.setOnMouseClicked(new EventHandler<MouseEvent>() {
            @Override
            public void handle(MouseEvent mouseEvent) {
                lessonsFilepw.write("");
                lessonsFilepw.close();

            }
        });
        deleteButton.setOnMouseClicked(new EventHandler<MouseEvent>() {
            @Override
            public void handle(MouseEvent mouseEvent) {
                 if(changeLessonName.getText().length()<= 12) {


                    try {
                        String lessonFileContents02 = new String();
                        int a = 0;
                        Scanner lessonFileScanner02 = new Scanner(Path.of("src\\Lessons.txt"));
                        while (lessonFileScanner02.hasNextLine()) {

                            if (a != numberOfLesson.get()) {
                                lessonFileContents02 += lessonFileScanner02.nextLine()+"\n";

                            } else {

                                lessonFileScanner02.nextLine();
                            }
                            a++;

                        }
                        if(lessonFileContents02.length()>0) {




                            printForDel(lessonFileContents02);

                            labelForSelectedLessons.setText(textForSelectedLabel(numberOfLesson.get()));
                            labelForLesson.setText(textFor__UN__SelectedLabel(numberOfLesson.get()));
                        }
                    } catch (IOException e) {
                        e.printStackTrace();
                    }


                }else{
                    changeLessonName.setText("Max 12 char");
                }
                removerootedit();
                scene.setRoot(rootFLSS);
            }
        });
         SaveNameButton.setOnMouseClicked(new EventHandler<MouseEvent>() {
             @Override
             public void handle(MouseEvent mouseEvent) {
                 if(changeLessonName.getText().length()<= 12) {

                     String lessonFileContents02 = new String();
                     int a = 0;
                     try {
                         Scanner lessonFileScanner02 = new Scanner(Path.of("src\\Lessons.txt"));
                         while (lessonFileScanner02.hasNextLine()) {

                             if (a != numberOfLesson.get()) {
                                 System.out.println("as");
                                 lessonFileContents02 += lessonFileScanner02.nextLine() + "\n";
                             } else {
                                 lessonFileContents02 += changeLessonName.getText() + "\n";
                                 lessonFileScanner02.nextLine();
                             }
                             a++;

                         }
                         File lessonsFile02 = new File("src\\Lessons.txt");
                         PrintWriter lessonsFilepw02 = new PrintWriter(new FileWriter(lessonsFile02));

                         lessonsFilepw02.print(lessonFileContents02);
                         lessonsFilepw02.flush();


                         labelForSelectedLessons.setText(textForSelectedLabel(numberOfLesson.get()));
                         labelForLesson.setText(textFor__UN__SelectedLabel(numberOfLesson.get()));
                     } catch (IOException e) {
                         e.printStackTrace();
                     }


                 }else{
                     changeLessonName.setText("Max 12 char");
                 }
             }
         });


        editButton.setOnMouseClicked(new EventHandler<MouseEvent>() {
            @Override
            public void handle(MouseEvent mouseEvent) {
                    changeLessonName.setText(getCurrentLessonName(numberOfLesson.get()));
                    addrootedit();
                    scene.setRoot(rootEdit);

            }
        });

      buttonLessonsUP.setOnMouseClicked(new EventHandler<MouseEvent>() {
          @Override
          public void handle(MouseEvent mouseEvent) {
              try {
                  if (numberOfLesson.get()<=linecounter()){
                  numberOfLesson.set(numberOfLesson.get() + 1);
                  try {
                      labelForSelectedLessons.setText(textForSelectedLabel(numberOfLesson.get()));
                      labelForLesson.setText(textFor__UN__SelectedLabel(numberOfLesson.get()));
                  } catch (IOException e) {
                      e.printStackTrace();
                  }


              }
              } catch (IOException e) {
                  e.printStackTrace();
              }
          }

      });
      buttonLessonsDOWN.setOnMouseClicked(new EventHandler<MouseEvent>() {
          @Override
          public void handle(MouseEvent mouseEvent) {
              if(numberOfLesson.get()>0) {
                  numberOfLesson.set(numberOfLesson.get() - 1);
                  try {
                      labelForSelectedLessons.setText(textForSelectedLabel(numberOfLesson.get()));
                      labelForLesson.setText(textFor__UN__SelectedLabel(numberOfLesson.get()));
                  } catch (IOException e) {
                      e.printStackTrace();
                  }
              }

          }

      });
        buttonSelectLesson.setOnMouseClicked(new EventHandler<MouseEvent>() {
            @Override
            public void handle(MouseEvent mouseEvent) {


                addrootflss();
                 scene.setRoot(rootFLSS);
            }
        });
        backButton.setOnMouseClicked(new EventHandler<MouseEvent>() {
            @Override
            public void handle(MouseEvent mouseEvent) {


                if(scene.getRoot()==rootFLSS) {
                   removerootflss();

                    scene.setRoot(rootForStartScreen);
                }

                if (scene.getRoot()==rootEdit){

                     removerootedit();
                    scene.setRoot(rootFLSS);

                }
            }
        });
        newLessonButton.setOnMouseClicked(new EventHandler<MouseEvent>() {
            @Override
            public void handle(MouseEvent mouseEvent) {


                lessonsFilepw.println("text");
                lessonsFilepw.flush();
                try {
                    labelForSelectedLessons.setText(textForSelectedLabel(numberOfLesson.get()));
                    labelForLesson.setText(textFor__UN__SelectedLabel(numberOfLesson.get()));
                } catch (IOException e) {
                    e.printStackTrace();
                }


            }
        });
    }

    public static void main(String[] args) {
        launch(args);
    }
    public String textForSelectedLabel(int lesson) throws IOException {
        Scanner lessonFileScanner3 = new Scanner(Path.of("src\\Lessons.txt"));

        int a = 0;
        String b ="";
        while (lessonFileScanner3.hasNextLine()){
            if(a == lesson){
                b = lessonFileScanner3.nextLine();
            }else{
                lessonFileScanner3.nextLine();
            }
            a++;
        }
        return b;
    }
    public String textFor__UN__SelectedLabel(int lesson) throws IOException {

        Scanner lessonFileScanner02 = new Scanner(Path.of("src\\Lessons.txt"));

        int a = 0;
        String b ="";
        while (lessonFileScanner02.hasNextLine() && a < lesson+6){
            if(a>=lesson+1) {
                    b += lessonFileScanner02.nextLine() + "\n";
            }else {
                lessonFileScanner02.nextLine();
            }
            a++;
        }

        return b;

    }
    public double getlessonFont(Number t1) {
        double a = 0;
        a = (62.0/500)*(double)t1/2;

        return a;
    }


    public int getborderpx(double screenpx) {

        int a = (int)screenpx/100;
          return a;
    }

    public int linecounter() throws IOException {
        Scanner lessonFileScanner04 = new Scanner(Path.of("src\\Lessons.txt"));
        int a = -2;
        while (lessonFileScanner04.hasNextLine()){
            a++;
            lessonFileScanner04.nextLine();

        }



        return a;
    }

    public void addrootflss() {
        rootFLSS.getChildren().add(newLessonButton);
        rootFLSS.getChildren().add(backButton);
        rootFLSS.getChildren().add(editButton);
        rootFLSS.getChildren().add(buttonLessonsUP);
        rootFLSS.getChildren().add(buttonLessonsDOWN);
        rootFLSS.getChildren().add(labelForLesson);
        rootFLSS.getChildren().add(labelForSelectedLessons);
        rootFLSS.getChildren().add(rectangleFor__UN__SelectedLesson);
        rootFLSS.getChildren().add(rectangleForSelectedLesson);


    }
    public void removerootflss() {

        rootFLSS.getChildren().remove(newLessonButton);
        rootFLSS.getChildren().remove(editButton);
        rootFLSS.getChildren().remove(buttonLessonsUP);
        rootFLSS.getChildren().remove(buttonLessonsDOWN);
        rootFLSS.getChildren().remove(labelForLesson);
        rootFLSS.getChildren().remove(labelForSelectedLessons);
        rootFLSS.getChildren().remove(rectangleFor__UN__SelectedLesson);
        rootFLSS.getChildren().remove(rectangleForSelectedLesson);
        rootFLSS.getChildren().remove(backButton);
    }
    public void addrootedit() {
        rootEdit.getChildren().add(deleteButton);
        rootEdit.getChildren().add(SaveNameButton);
        rootEdit.getChildren().add(testbutton);
        rootEdit.getChildren().add(changeLessonName);
        rootEdit.getChildren().add(backButton);
    }
    public void removerootedit() {
        rootEdit.getChildren().remove(deleteButton);
        rootEdit.getChildren().remove(SaveNameButton);
        rootEdit.getChildren().remove(testbutton);
        rootEdit.getChildren().remove(changeLessonName);
        rootEdit.getChildren().remove(backButton);
        rootFLSS.getChildren().add(backButton);
    }
    public String getCurrentLessonName(int d){


        String c = "";
        try {
            int a = 0;

            Scanner lessonFileScanner05 = new Scanner(Path.of("src\\Lessons.txt"));
            while (lessonFileScanner05.hasNextLine()){
                if (d == a){
                    c = lessonFileScanner05.nextLine();
                }else{
                    lessonFileScanner05.nextLine();
                }
                a++;

            }
        } catch (IOException e) {
            e.printStackTrace();
        }
        return c;
    }
    public void printForDel(String FileContent) throws IOException {

        File lessonFile03 = new File("src\\Lessons.txt");
        PrintWriter lessonsFilepw03 = new PrintWriter(new FileWriter(lessonFile03));

        lessonsFilepw03.print(FileContent);
        lessonsFilepw03.flush();
        lessonsFilepw03.close();
    }
}
 
K

kneitzel

Gast
Das ist nicht so sehr das, was ich ein minimales Beispiel nennen würde.

Der generelle Tipp wäre da an erster Stelle, dass Du nicht alles in eine Klasse zwängst sondern Dinge besser unterteilst. Bei grafischen Oberflächen bietet sich z.B. eine Trennung in Model, View und Controller. Das kannst Du unter MVC Pattern im Netz auch im Detail nachlesen.

Davon unabhängig fallen diverse Dinge auf:

A) Der wichtigste Punkt, der nicht beachtet wird, hängt mit dem Interface AutoClosable zusammen. Es gibt Klassen, die dies implementieren, weil es notwendig ist, dass am Ende immer ein close() aufgerufen wird.
Bei einer Datei, die geöffnet wird, kann das problematisch sein, denn je nach Betriebssystem und Umgang hast Du da dann einen Zugriffsfehler (Windows lockt Dateien) und bei anderen Systemen (Linux, Mac) kann das zu unerwarteten Ergebnissen führen.

Das bedeutet also, dass ein Scanner auf einer Datei auch geschlossen werden muss. Und bei Streams / Reader/Writer und so gilt das Gleiche.

Da das Schließen immer erfolgen soll - auch wenn z.B. eine Exception auftritt, muss dies entweder in ein try / finally oder man nutzt das try with resources welches Java bietet: https://docs.oracle.com/javase/tutorial/essential/exceptions/tryResourceClose.html
Da ist dann kein close() Aufruf mehr notwendig und der Java Compiler baut dies für einen explizit ein.

B) Und in Java den Pfad statt mit Backslash ruhig mit / aufbauen - dann läuft das auch auf nicht Windows Systemen.

C) Dinge die Du an vielen Stellen brauchst (z.B. String Literale) einmal als Konstante definieren - dann muss man da bei Anpassungen nicht an vielen Stellen ändern (Ich durfte da an 9 Stellen die Datei mit Pfad anpassen für Tests).

Ich konnte das von Dir beschriebene Problem nicht bei mir feststellen. Da Du Windows nutzt wäre meine Vermutung, dass Du auch eine Exception bekommen haben musst, da die Datei nicht geschlossen wurde (An mindestens einer Stelle).

Das wären so die Hinweise, die ich so geben kann - leider noch sehr allgemein, da ich das Problem im Detail leider immer noch nicht sehe.
 

Nilsy8214

Aktives Mitglied
Das ist nicht so sehr das, was ich ein minimales Beispiel nennen würde.

Der generelle Tipp wäre da an erster Stelle, dass Du nicht alles in eine Klasse zwängst sondern Dinge besser unterteilst. Bei grafischen Oberflächen bietet sich z.B. eine Trennung in Model, View und Controller. Das kannst Du unter MVC Pattern im Netz auch im Detail nachlesen.

Davon unabhängig fallen diverse Dinge auf:

A) Der wichtigste Punkt, der nicht beachtet wird, hängt mit dem Interface AutoClosable zusammen. Es gibt Klassen, die dies implementieren, weil es notwendig ist, dass am Ende immer ein close() aufgerufen wird.
Bei einer Datei, die geöffnet wird, kann das problematisch sein, denn je nach Betriebssystem und Umgang hast Du da dann einen Zugriffsfehler (Windows lockt Dateien) und bei anderen Systemen (Linux, Mac) kann das zu unerwarteten Ergebnissen führen.

Das bedeutet also, dass ein Scanner auf einer Datei auch geschlossen werden muss. Und bei Streams / Reader/Writer und so gilt das Gleiche.

Da das Schließen immer erfolgen soll - auch wenn z.B. eine Exception auftritt, muss dies entweder in ein try / finally oder man nutzt das try with resources welches Java bietet: https://docs.oracle.com/javase/tutorial/essential/exceptions/tryResourceClose.html
Da ist dann kein close() Aufruf mehr notwendig und der Java Compiler baut dies für einen explizit ein.

B) Und in Java den Pfad statt mit Backslash ruhig mit / aufbauen - dann läuft das auch auf nicht Windows Systemen.

C) Dinge die Du an vielen Stellen brauchst (z.B. String Literale) einmal als Konstante definieren - dann muss man da bei Anpassungen nicht an vielen Stellen ändern (Ich durfte da an 9 Stellen die Datei mit Pfad anpassen für Tests).

Ich konnte das von Dir beschriebene Problem nicht bei mir feststellen. Da Du Windows nutzt wäre meine Vermutung, dass Du auch eine Exception bekommen haben musst, da die Datei nicht geschlossen wurde (An mindestens einer Stelle).

Das wären so die Hinweise, die ich so geben kann - leider noch sehr allgemein, da ich das Problem im Detail leider immer noch nicht sehe.
ok vielen dank ich versuch das mit dem close mal
 

Neumi5694

Top Contributor
Ein paar kleine Anmerkungen / Tips (das sind keine Fehler, nur Denkanstöße)

Verwende auf jeden Fall das von Kneitzel vorgeschlagen try-with-resource. Die macht dein Leben ungemein leichter, wenn du mal das Prinzip davon verstanden hast.

Ich hab's mit zur Angewohnheit gemacht, Textdateien nicht in eine einzige String-Wurst einzulesen, sondern zeilenweise in eine Arraylist, ausgewertet wird später im Normalfall eh pro Zeile.

Java:
    public Optional<ArrayList<String>> readTextFile(String filenmame) { //eventuell noch das Charset als Parameter mitgeben, es ist ja nicht alles ANSI
        ArrayList<String> fileContent = new ArrayList<>();
        try (BufferedReader rd = new BufferedReader(new FileReader(new File(filenmame)))) {
            for (String line = rd.readLine(); line != null; line = rd.readLine()) {
                fileContent.add(line);
            }
        } catch (IOException ex) {
            Logger.getLogger(getClass().getName()).log(Level.SEVERE, null, ex);
            return Optional.empty(); //Rückgabe im Fehlerfall ist leer
        }
        return Optional.of(fileContent);
    }

Beim Zusammensetzen von Strings verwende einen Stringbuilder, anstatt mit += jedes Mal einen neuen String erstellen zu lassen
b.append(line).append('\n').
Der Stringbuilder erlaubt dir dann auch ganz einfach, den so entstehenden letzten überflüssigen Zeilenumbruch wieder wegzustreichen.
b.setLength(Math.max(0, b.getLength()-1))
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
tobikoch String x= null Bedeutung Java Basics - Anfänger-Themen 9
der_Schokomuffin Hilfe gesucht: String wird auf null gesetzt! Java Basics - Anfänger-Themen 17
V String Array gegen null-Eintrag sichern Java Basics - Anfänger-Themen 11
F String equals NULL Problem Java Basics - Anfänger-Themen 4
J .txt Datei "einlesen "und in String speichern ergibt immer NULL Java Basics - Anfänger-Themen 17
N 'null' aus String löschen Java Basics - Anfänger-Themen 7
M String-Array-Element wieder null zuweisen Java Basics - Anfänger-Themen 16
F String equals null wird nicht angenommen. Java Basics - Anfänger-Themen 24
M Frage zu String null-Wert Java Basics - Anfänger-Themen 2
G string "null" in null casten Java Basics - Anfänger-Themen 3
K String--null ; und int ? Java Basics - Anfänger-Themen 7
H NULL String Java Basics - Anfänger-Themen 4
G string mit null abfragen Java Basics - Anfänger-Themen 8
T Ich brauche eine Schleife die eine beliebige Zahl so lange durch 10 teilt bis zur Null Java Basics - Anfänger-Themen 5
M NullPointerException: Cannot read the array length because "this.Kinder" is null Java Basics - Anfänger-Themen 1
W Null-Pointer Exception beim Programmstart Java Basics - Anfänger-Themen 8
J 2 listen vergleichen, die auch null Elemente haben können ! Java Basics - Anfänger-Themen 9
W Null-Pointer trotz Konstruktor? Java Basics - Anfänger-Themen 9
S leeres Array statt Null Pointer Exception ausgeben Java Basics - Anfänger-Themen 20
I Grundsatzfrage: Belegt eine Referenz auf 'null' RAM, und wenn ja - wieviel ;-) ? Java Basics - Anfänger-Themen 5
H Ein übergegebenes Objekt auf null setzen Java Basics - Anfänger-Themen 9
P Buffer und null Java Basics - Anfänger-Themen 3
"java.util.HashMap.get(Object)" is null Java Basics - Anfänger-Themen 10
jakobfritzz Array- cannot invoke "" because "" is null Java Basics - Anfänger-Themen 4
W Wie ziehe ich von einer bestimmten Zahl, Zahlen ab, bis mein Ergebnis null beträgt? Java Basics - Anfänger-Themen 10
S JavaKara Null Exception Error Java Basics - Anfänger-Themen 4
K Bufread.readLine())!= null wie beenden? Java Basics - Anfänger-Themen 4
C Variablen Provided text for message may not be null Java Basics - Anfänger-Themen 9
T ComboBox getValue() zeigt null Java Basics - Anfänger-Themen 7
J null exception Array Java Basics - Anfänger-Themen 5
C NumberFormatException: null ohne Ausnahmebehandlung stoppen Java Basics - Anfänger-Themen 7
J Int wird als Null ausgegeben Java Basics - Anfänger-Themen 8
M Prüfen auf null ohne NPE Java Basics - Anfänger-Themen 1
C Array-Eintrag wieder auf Null setzen Java Basics - Anfänger-Themen 3
C Array auf Null-Inhalte prüfen Java Basics - Anfänger-Themen 9
V NullPointerException, wenn Key und Value null sind Java Basics - Anfänger-Themen 2
M jTable bekommt null Java Basics - Anfänger-Themen 1
B MySQL (jdbc) -> connection liefert NULL Java Basics - Anfänger-Themen 3
L Warum ist Variable null? Java Basics - Anfänger-Themen 3
J javax.servlet.ServletException: Name is null Java Basics - Anfänger-Themen 7
B if(object== null) abkürzen? Java Basics - Anfänger-Themen 6
O JavaArray Null Java Basics - Anfänger-Themen 3
U Null Exception aber keine Ahnung warum Java Basics - Anfänger-Themen 5
W NullPointerException obwohl nicht null? Java Basics - Anfänger-Themen 3
D Best Practice Konvention - Klassenmembers auf null setzen? Java Basics - Anfänger-Themen 2
I Null-Überprüfung durch Lambda-Expressions abkürzen Java Basics - Anfänger-Themen 8
Orkanson Null Pointer Expception Java Basics - Anfänger-Themen 3
M set Integer bzw. set null mit SQL DB Java Basics - Anfänger-Themen 9
I Polymorphie Null Objekt Java Basics - Anfänger-Themen 3
O Datentypen Integer mit führender Null Java Basics - Anfänger-Themen 13
DaCrazyJavaExpert Compiler-Fehler Variable nicht mit null initialisiert, trotzdem: NullPointerException Java Basics - Anfänger-Themen 28
J Einfache Frage zu "null" Java Basics - Anfänger-Themen 2
T Datei in Array einlesen "null" Java Basics - Anfänger-Themen 8
P Operatoren Parameter nicht auf null geprüft? Java Basics - Anfänger-Themen 16
K Operatoren 2D Int Array auf Null-Referenzen prüfen Java Basics - Anfänger-Themen 18
C Null Pointer Exception Java Basics - Anfänger-Themen 10
V Elemente aus einem Array mit null überschreiben Java Basics - Anfänger-Themen 4
G Null Pointer Exception Java Basics - Anfänger-Themen 4
R Gleitkommazahlen ohne führende Null Java Basics - Anfänger-Themen 10
M array = null Java Basics - Anfänger-Themen 2
F JSON null macht mir ein Problem Java Basics - Anfänger-Themen 3
R Property Value als null setzen Java Basics - Anfänger-Themen 1
D Arrays.toString spuckt null aus? Java Basics - Anfänger-Themen 3
T Compiler-Fehler Null type safety (type annotations) Java Basics - Anfänger-Themen 5
F Erste Schritte Unterschied: Array "leer" / "null" Java Basics - Anfänger-Themen 3
J Fehlerhafte Ausgabe "null" Java Basics - Anfänger-Themen 2
G Threads zum Thema Threads??? null Ahnung Java Basics - Anfänger-Themen 4
W Input/Output DataOutputStream gibt NULL zurück Java Basics - Anfänger-Themen 5
J Einfach verkettet List: Ausgabe ohne null Java Basics - Anfänger-Themen 11
D OOP Warum bekomme ich eine Null-Pointer Exception!!? :( Java Basics - Anfänger-Themen 4
D Null Ausgabe obwohl wert zugewiesen Java Basics - Anfänger-Themen 5
J Alias null Java Basics - Anfänger-Themen 4
B Aliasing bei null-Objekten Java Basics - Anfänger-Themen 3
A null-Überprüfung Java Basics - Anfänger-Themen 24
O Methode gibt Null zurück Java Basics - Anfänger-Themen 7
D Methoden Implementieren von einer Zoomfunktion innerhalb eines JPanels mit null-Layoutmanager Java Basics - Anfänger-Themen 1
A Null Pointer Exception in Liste Java Basics - Anfänger-Themen 11
T Null Java Basics - Anfänger-Themen 3
X Array trotz Befüllung "null" Java Basics - Anfänger-Themen 11
P JavaFX Textfelder geben immer null zurück Java Basics - Anfänger-Themen 8
K Selbst renderndes Object auf null setzen Java Basics - Anfänger-Themen 1
L Null Pointer Exception bei setText Java Basics - Anfänger-Themen 9
D Methode die statt char[] ein "null" zurück gibt Java Basics - Anfänger-Themen 8
M Input/Output File.listFiles() gibt null zurück Java Basics - Anfänger-Themen 3
M Kann einen Array nicht füllen, im Nachhinein nur "null"-Werte Java Basics - Anfänger-Themen 11
J Verschränkte Rekursion und null Ahnung... Java Basics - Anfänger-Themen 0
X Vererbung Setzen auf Null bei Subklassen Java Basics - Anfänger-Themen 2
S Rückgabewert null in Methode mit Thread Java Basics - Anfänger-Themen 2
C MIME-Type null Java Basics - Anfänger-Themen 4
T Null Pointer Exception Java Basics - Anfänger-Themen 4
M toString gibt "null" statt "0.0" aus Java Basics - Anfänger-Themen 5
M Konstruktor auf null prüfen, Arrays Java Basics - Anfänger-Themen 9
G Null Pointer Exeption Java Basics - Anfänger-Themen 8
A If object != null funktioniert nicht Java Basics - Anfänger-Themen 2
F Irgendein "Null" Fehler.... Java Basics - Anfänger-Themen 5
P Map liefert bei put null als Ergebnis Java Basics - Anfänger-Themen 6
M Interface Das Null-Layout Java Basics - Anfänger-Themen 12
M Problem mit null pinterexception beim laden von Bildern Java Basics - Anfänger-Themen 20
Dogge NumberFormatException null Java Basics - Anfänger-Themen 5
C 2 Objekte, 1 immer Null? Java Basics - Anfänger-Themen 8

Ähnliche Java Themen

Neue Themen


Oben