Java: Warum die Prüfung für "\n" nicht mit dem übereinstimmt, werden neue Zeilen Hinzugefügt mit dem System.getProperty(“line.separator")

(Aktualisiert, Frage)

Erste, ich denke, dass "\n" entspricht System.getProperty("line.separator")

Schrieb ich einige Methoden zum arbeiten mit Strings, einige von Ihnen schauen auf die Existenz der neuen Linie

if (string.charAt(i) == '\n') {//do something;}

Aber ich bemerkte, dass die Prüfung für "\n" nicht mit der neue Zeilen Hinzugefügt, indem die System.getProperty("line.separator")

Dies ist ein SSCCE zu demonstrieren, dass mein Anspruch!:

Beschreibung:

Zwei strings gleicher text; eine alpha_String hat neue Linien Hinzugefügt, mit "\n", und die anderen beta_String hat neue Linien Hinzugefügt, mit System.getProperty("line.separator")

Gibt es eine Methode mit dem Namen String removeExtraNewLines(String) verwendet, um entfernen Sie alle zusätzlichen neuen Zeilen in ein String und wieder zurück, wie der header schon sagt. Die beiden strings gefiltert, diese Methode verwenden.

Den beiden Tasten buttonAlpha und buttonBeta jedem Satz den text der JTextArea mit der gefilterten Zeichenfolge

Sie werden feststellen,, dass die Methode fangen/passen, und entfernen Sie zusätzliche neue Linien alpha_String aber nicht tun das gleiche mit beta_String

import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import javax.swing.*;

public class NewLineTest extends JPanel
{

    JPanel buttonPanel;
    JPanel textAreaPanel;
    JButton buttonAlpha;
    JButton buttonBeta;
    JTextArea textArea;
    String n = "\n";
    String s = System.getProperty("line.separator");
    String alpha_String;
    String beta_String;

    public NewLineTest()
    {
        createSentencesText();
        buttonAlpha = new JButton("Alpha String");
        buttonAlpha.addActionListener(eventWatcher);

        buttonBeta = new JButton("Beta String");
        buttonBeta.addActionListener(eventWatcher);

        textArea = new JTextArea(0, 0);
        JScrollPane scrollTextArea = new JScrollPane(textArea);
        scrollTextArea.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
        textArea.setEditable(false);

        buttonPanel = new JPanel();
        textAreaPanel = new JPanel(new BorderLayout());

        buttonPanel.add(buttonAlpha);
        buttonPanel.add(buttonBeta);

        textAreaPanel.add(scrollTextArea, BorderLayout.CENTER);

        JSplitPane splitPane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, textAreaPanel, buttonPanel);
        splitPane.setDividerLocation(400);
        splitPane.setResizeWeight(.5d);
        this.setLayout(new BorderLayout());
        this.add(splitPane);
    }

    private void createSentencesText()
    {
        alpha_String = "A: Let’s go to the beach." + n + n
                + "B: That’s a great idea." + n
                + "A: We haven’t been in a while." + n + n
                + "B: We haven’t been in a month." + n
                + "A: The last time we went, you almost drowned." + n
                + "B: No, I didn’t." + n + n + n
                + "A: Then why did the lifeguard dive into the water?" + n
                + "B: I think he wanted to cool off." + n
                + "A: He swam right up to you." + n
                + "B: And then he turned right around." + n
                + "A: Maybe you’re right." + n
                + "B: Maybe we should get going.";


        beta_String = "A: Let’s go to the beach." + s + s
                + "B: That’s a great idea." + s
                + "A: We haven’t been in a while." + s + s
                + "B: We haven’t been in a month." + s
                + "A: The last time we went, you almost drowned." + s
                + "B: No, I didn’t." + s + s + s
                + "A: Then why did the lifeguard dive into the water?" + s
                + "B: I think he wanted to cool off." + s
                + "A: He swam right up to you." + s
                + "B: And then he turned right around." + s
                + "A: Maybe you’re right." + s
                + "B: Maybe we should get going.";
    }

    public static String removeExtraNewLines(String s)
    {
        String myNewString = s.trim();
        StringBuilder stringB = new StringBuilder();

        char previouseChar = '~';
        for (int i = 0; i < myNewString.length(); i++)
        {
            if (i > 1)
            {
                previouseChar = myNewString.charAt(i - 1);
            }
            if ((myNewString.charAt(i) == '\n') && (previouseChar == '\n'))
            {
                continue;
            }

            stringB.append(myNewString.charAt(i));
        }
        myNewString = stringB.toString();
        return myNewString;
    }
    AbstractAction eventWatcher = new AbstractAction()
    {
        @Override
        public void actionPerformed(ActionEvent ae)
        {
            Object source = ae.getSource();
            if (source == buttonAlpha)
            {
                String arranged_string_alpha = removeExtraNewLines(alpha_String);
                textArea.setText(arranged_string_alpha);
            }
            if (source == buttonBeta)
            {
                String arranged_string_beta = removeExtraNewLines(beta_String);
                textArea.setText(arranged_string_beta);
            }
        }
    };

    private static void createAndShowGUI()
    {
        JFrame frame = new JFrame("NewLine Test");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setSize(700, 300);
        frame.add(new NewLineTest(), BorderLayout.CENTER);
        frame.setVisible(true);
    }

    public static void main(String[] args)
    {
        SwingUtilities.invokeLater(new Runnable()
        {
            public void run()
            {
                UIManager.put("swing.boldMetal", Boolean.FALSE);
                createAndShowGUI();
            }
        });
    }
}

Also die Frage: Warum die Prüfung für "\n" nicht mit neuen Linien Hinzugefügt, mit System.getProperty("line.separator")?, Und Wie passen Sie?

  • Haben Sie sichergestellt, dass auf Ihrem system das System konstant ist in der Tat gleich zu '\n'? Es sollte nicht mehr als ein einfacher Vergleich, um zu entdecken, richtig?
  • Zuerst von allen, welche Betriebssysteme Sie verwenden, um dies zu testen? Zweitens, besitzt if (string.charAt(i) == System.getProperty("line.separator")) nicht so funktionieren wie Sie es erwarten? Drittens, haben Sie versucht, mit einem debugger zu untersuchen, was der Wert von System.getProperty("line.separator") eigentlich ist?
  • Dieser Artikel kann Sie interessieren en.wikipedia.org/wiki/Newline
  • Sie öffnete ein Kopfgeld, aber ohne zu erklären, warum die meisten von Ihnen positiv bewertet werden Antwort Ihre Frage nicht beantwortet. \n ist Plattform-abhängig, System.getProperty("line.separator") könnte \n oder \r\n.
  • Jon Skeet, sagte "Es ist nicht wirklich klar, was Sie versuchen zu überprüfen, in alle", So dass ich aktualisiert meine Frage mit SSCCE, ich dachte, die Antwort wäre anders, wenn die Frage sich wesentlich übersichtlicher. Dank
InformationsquelleAutor Saleh Feek | 2013-01-23
Schreibe einen Kommentar