2016-05-06 60 views
4

我正在制作一个Java程序,但我遇到了一个问题。String.split()后无法获得子字符串?

首先,让我告诉你的代码:

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(路径)”,它只是返回字符串列表(列表),其中包括TXT文件的每一行。

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

  3. 我有它,所以当没有选中该框时,文本字段变灰,工作正常。

  4. 如果该文件有一行以“playerSendMessage%$%@@”开头的行,该框将被选中,这将起作用。

不工作的东西是它将文本字段的文本设置为该行的第二个子字符串的位置。

例如,文件的行可以是“playerSendMessage%$%@@ Hello!”。这将导致该框被检查,并且该字段表示“你好!”

除字段说文本的部分外,一切正常。

这可能只是一个简单的事情,我忽略了,或者可能不是。任何人都可以帮忙吗?

+0

您可能会尝试在调试器中运行您的代码或添加println()语句以查看您的代码到底有多远,以及给定变量的值是多少。 ... 1)执行是否进入if(file.exists())语句块内部? 2)它是否进入for(String s:...)循环? 3)它是否进入if(s.startsWith ...)语句中? 4)d内的大小和数值是多少? 5)pSmg.setText()行之前的'text'变量的最终值是什么? – GreenGiant

+0

我很好奇,如果您尝试制作正则表达式参数“playerSendMessage%$%@@”,会发生什么? –

+0

对于像something-dot-functionOfSomething这样的行,我们可能会从看到大部分代码中受益。 –

回答

3

你的文件的行名称中包含这意味着线对RegExp patterns.

结束所以解决办法是用\\转义字符冲突与正则表达式的语法像这样的性格'$'

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

它的工作原理!这次真是万分感谢!我刚刚摆脱了$,因为我不需要它,它的工作! – Blockhead7360

+0

不客气=),不要混淆'parameter'和'substring'!!这个词。 – another