Java:为什么要检查\";不';不匹配使用System.getProperty(“line.separator”)添加的新行

Java:为什么要检查\";不';不匹配使用System.getProperty(“line.separator”)添加的新行,java,newline,Java,Newline,(更新的问题) 首先,我认为“\n”相当于System.getProperty(“line.separator”) 我编写了一些处理字符串的方法,其中一些方法检查是否存在新行 if(string.charAt(i)='\n'){//do something;} 但是我注意到检查“\n”与System.getProperty(“line.separator”) 这是一个SSCCE来证明我的主张!: 说明: 两个相同文本的字符串;一个alpha\u字符串使用“\n”添加了新行,另一个beta\u字符

更新的问题

首先,我认为
“\n”
相当于
System.getProperty(“line.separator”)

我编写了一些处理字符串的方法,其中一些方法检查是否存在新行

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

但是我注意到检查
“\n”
System.getProperty(“line.separator”)

这是一个SSCCE来证明我的主张!:

说明:
两个相同文本的字符串;一个
alpha\u字符串
使用
“\n”
添加了新行,另一个
beta\u字符串
使用
System.getProperty(“line.separator”)

有一个名为
stringremoveextranewlines(String)
的方法,用于删除字符串中的任何额外新行并将其返回;正如标题所示。使用此方法筛选的两个字符串

两个按钮
buttonAlpha
buttonBeta
分别使用过滤字符串设置
JTextArea
的文本

您将注意到该方法捕获/匹配并删除额外的
alpha\u字符串行
,但对
beta\u字符串

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();
            }
        });
    }
}
导入java.awt.BorderLayout;
导入java.awt.event.ActionEvent;
导入javax.swing.*;
公共类NewLineTest扩展了JPanel
{
JPanel按钮面板;
JPanel文本区域面板;
JButton buttonAlpha;
钮扣塔;
JTextArea textArea;
字符串n=“\n”;
字符串s=System.getProperty(“line.separator”);
字符串alpha_字符串;
字符串beta_字符串;
公共NewLineTest()
{
createSentenceText();
buttonAlpha=新的JButton(“字母字符串”);
buttonAlpha.addActionListener(事件观察者);
buttonBeta=新的JButton(“Beta字符串”);
addActionListener(eventWatcher);
textArea=新的JTextArea(0,0);
JScrollPane scrollTextArea=新的JScrollPane(textArea);
scrollTextArea.setVerticalScrollBarPolicy(JScrollPane.VERTICAL\u SCROLLBAR\u ALWAYS);
textArea.setEditable(false);
buttonPanel=新的JPanel();
textAreaPanel=newjpanel(newborderlayout());
按钮面板。添加(按钮面板);
按钮面板。添加(按钮栏);
textAreaPanel.add(滚动textarea,BorderLayout.CENTER);
JSplitPane splitPane=新的JSplitPane(JSplitPane.HORIZONTAL_SPLIT,textAreaPanel,buttonPanel);
splitPane.setDividerLocation(400);
splitPane.setResizeWeight(.5d);
此.setLayout(新的BorderLayout());
添加(拆分窗格);
}
私有void createSentenceText()
{
我们去海滩吧
+B:好主意
+“我们好久没来了。”+n+n
+B:我们已经一个月没来了
+我们上次去的时候,你差点淹死
+B:不,我没有
+“那么救生员为什么要潜入水中?”+n
+我想他是想冷静下来
+A:他游到你跟前
+B:然后他右转了
+也许你是对的
+“B:也许我们该走了。”;
beta_String=“A:我们去海滩吧。”+s+s
+B:好主意
+A:我们好久没来了
+B:我们已经一个月没来了
+“上次我们去的时候,你差点淹死。”
+B:不,我没有
+“那救生员为什么要潜入水中?”
+我想他是想冷静下来
+A:他游到你跟前
+B:然后他右转了
+也许你是对的
+“B:也许我们该走了。”;
}
公共静态字符串removeExtraNewLines(字符串s)
{
字符串myNewString=s.trim();
StringBuilder stringB=新的StringBuilder();
char previouseChar='~';
对于(int i=0;i1)
{
previouseChar=myNewString.charAt(i-1);
}
if((myNewString.charAt(i)='\n')&&(previouseChar=='\n'))
{
继续;
}
stringB.append(myNewString.charAt(i));
}
myNewString=stringB.toString();
返回myNewString;
}
AbstractAction eventWatcher=new AbstractAction()
{
@凌驾
已执行的公共无效行动(行动事件ae)
{
Object source=ae.getSource();
如果(源==按钮PHA)
{
排列的字符串\u字符串\u alpha=移除的外部排列线(alpha字符串);
textArea.setText(排列的字符串字母);
}
如果(源==按钮数据)
{
排列的字符串\u字符串\uβ=移除的外部字符串(β字符串);
textArea.setText(排列的字符串);
}
}
};
私有静态void createAndShowGUI()
{
JFrame=新JFrame(“换行测试”);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
框架。设置尺寸(700300);
frame.add(NewLineTest(),BorderLayout.CENTER);
frame.setVisible(true);
}
公共静态void main(字符串[]args)
{
SwingUtilities.invokeLater(新的Runnable()
{
公开募捐
{
摆臂