2016-05-06 58 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