在String.split()之后无法获取子字符串?

时间:2016-05-06 23:47:32

标签: java arrays regex string split

我正在制作一个Java程序,但我遇到了一个问题。

首先,让我告诉你代码:

if (file.exists()){
        for (String s : DFileLoader.getMethod(pathToSaveAs)){
            if (s.startsWith("playerSendMessage%$%@@")){
                pSmsgc.setSelected(true);

            }else{
                pSmsg.setEnabled(false);
            }
        }
        if (DFileLoader.getMethod(pathToSaveAs).size() <= 0){
            pSmsg.setEnabled(false);
        }
    }else{
        pSmsg.setEnabled(false);
    }
    pSmsgc.setFont(fDisp);
    pSmsgc.setBounds(new Rectangle(50, 135, 140, 30));
    pSmsg.setBounds(new Rectangle(175, 135, 150, 30));
    pSmsgc.addActionListener(new ActionListener(){
        public void actionPerformed(ActionEvent e){
            if (pSmsgc.isSelected()) pSmsg.setEnabled(true);
            else pSmsg.setEnabled(false);
        }
    });
    pane.add(pSmsgc);


    if (file.exists()){
        for (String s : DFileLoader.getMethod(pathToSaveAs)){
            if (s.startsWith("playerSendMessage%$%@@")){
                String[] d = s.split("%$%@@");
                String text;
                if (d.length <= 1) text = "";
                else text = d[1];
                pSmsg.setText(text);
            }
        }
    }
    pane.add(pSmsg);

以下是一些需要了解的事项:

  1. 当我使用“getMethod(path)”时,它只返回一个字符串列表(List),其中包含TXT文件的每一行。

  2. pSmsgc是一个JCheckBox,pSmsg是一个JTextField。

  3. 我没有选中此框,文本字段显示为灰色,工作正常。

  4. 如果文件的行以“playerSendMessage%$%@@”开头,则会检查该框是否有效。

  5. 不起作用的是它将文本字段的文本设置为该行的第二个子字符串。

    例如,文件的行可以是“playerSendMessage%$%@@ Hello!”。这将导致检查框,并将字段显示为“Hello!”

    除了字段说明文本的部分外,一切都有效。

    这可能只是一件简单的事情,我忽略了,或许不是。有人可以帮忙吗?

1 个答案:

答案 0 :(得分:3)

您文件的行名称包含字符'$',表示RegExp patterns.

上的行尾

因此,解决方案是使用\\转义与RegExp语法冲突的字符,如下所示:

String[] d = s.split("%\\$%@@");