Удаление слов после обнаружения символа - PullRequest
1 голос
/ 26 мая 2011

Как удалить слова из текстового файла, перед которыми стоят символы?

Например:

This is important information...  //but this is a comment
This is more important info...  //and this is another comment

Как удалить слова вместе с символом "// ноэто комментарий "?

Вот мой псевдокод:

1. If "//" is detected, line.replace "//" symbol
2. Clear the words after the symbol 
3. Go on to the next line till you see "//" symbol
4. Repeat steps 1-3 (loop).

Примечание: это происходит во время чтения файла:

String line;
while ((line = textReader.readLine()) != null) 

Ответы [ 3 ]

1 голос
/ 26 мая 2011

Я предполагаю, что с учетом:

This is important information...  //but this is a comment
This is more important info...  //and this is another comment

Вы хотите:

This is important information...
This is more important info...

Примерно так должно работать:

Pattern pattern = Pattern.compile("//.*$", Pattern.DOTALL);
Matcher matcher = pattern.matcher(line);

line = matcher.replaceFirst("");

Pattern - это то, что Java использует для регулярных выражений. Вот некоторая информация о регулярных выражениях Java в Java. Регулярное выражение, которое я использовал, ищет две косые черты и все после этого до конца строки. Затем сопоставляемый текст заменяется пустой строкой. Pattern.DOTALL указывает Java обрабатывать ^ и $ как маркеры начала и конца строки.

EDIT

Этот код ниже демонстрирует, как это работает:

import java.util.regex.*; 

public class RemoveComments { 

   public static void main(String[] args){ 

      String[] lines = {"This is important information...  //but this is a comment", "This is more important info...  //and this is another comment"}; 
      Pattern pattern = Pattern.compile("//.*$", Pattern.DOTALL); 

      for(String line : lines) { 
          Matcher matcher = pattern.matcher(line); 

          System.out.println("Original: " + line); 
          line = matcher.replaceFirst(""); 

          System.out.println("New: " + line); 
      } 
   } 
}
0 голосов
/ 26 мая 2011

Вы можете использовать String.replaceAll() для замены регулярного выражения в одной строке:

line = line.replaceAll("//.*$", "");
0 голосов
/ 26 мая 2011

Просто выдвинув идею, вы можете поиграть с функциями String

, сначала найдите персонажи, которые удаляют

int i = indexOf('//', 0);

Затем найдите индекс следующего пробела

secondIndex = indexOf(' ',i);

тогда вы можете извлечь обе стороны

String s1 = subString(0,i);

String s2 = subString(secondIndex,i);

String res = s1+s2;

Это не оптимально, но следует выполнить работу ^^

...