2016-05-06 3 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!». Это приведет к тому, что окно будет проверено, а поле «Hello!»

Все работает, за исключением части, где поле говорит текст.

Это может быть простая вещь, которую я пропускаю, а может и нет. Кто-нибудь может помочь?

+0

Возможно, вы попытаетесь запустить код в отладчике или добавить инструкции println(), чтобы узнать, насколько далеко ваш код получает и какие значения имеют заданная переменная. ... 1) Выполняется ли выполнение внутри блока оператора if (file.exists())? 2) Получается ли он внутри цикла for (String s: ...)? 3) Он попадает внутрь инструкции if (s.startsWith ...)? 4) Каков размер и значения внутри d? 5) Каково конечное значение переменной «text» непосредственно перед строкой pSmg.setText()? – GreenGiant

+0

Мне интересно, что произойдет, если вы попытаетесь сделать аргумент regex «playerSendMessage% $% @@»? –

+0

С линиями, как-то-dot-functionOfSomething, нам может быть полезно увидеть большую часть вашего кода. –

ответ

3

название линии вашего файла содержит символ '$', что означает конца строки на RegExp patterns.

Таким образом, решение было бы избежать с \\ характером в конфликте с RegExp синтаксисом, как это:

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

Он работает! Спасибо тебе за это! Я просто избавился от $, потому что мне это не нужно, и это сработало! – Blockhead7360

+0

Добро пожаловать =), и не путайте слово «параметр» с «подстрокой» !!. – another