2013-09-19 4 views
3

Я хотел бы сделать функцию, которая получает строку, и в случае, если она имеет встроенные комментарии, она удаляет ее.Удаление комментариев из строки

public class sample { 

    public static void main(String[] args) { 
     String code = "/**THIS IS SAMPLE CODE */ public class TestFormatter{public static void main(String[] args){int i =2; String s= \"name\";\\u give give change the values System.out.println(\"Hello World\");//sample}}"; 

     CodeFormatter codeFormatter = ToolFactory.createCodeFormatter(null); 

     TextEdit textEdit = codeFormatter.format(
       CodeFormatter.K_COMPILATION_UNIT, code1, 0, code1.length(), 0, 
       null); 
     IDocument doc = new Document(code1); 
     try { 
      textEdit.apply(doc); 
      System.out.println(doc.get()); 
     } catch (MalformedTreeException e) { 
      e.printStackTrace(); 
     } catch (BadLocationException e) { 
      e.printStackTrace(); 
     } 
    } 
} 

Я получаю исключение исключения в виде исключения в textEdit.apply(doc). Это потому, что он не принимает комментарии.

Можете ли вы рассказать мне, что является лучшим способом удалить комментарии из строки? (пожалуйста, не советуйте слишком сложные решения).

+0

@ sᴜʀᴇsʜᴀᴛᴛᴀ Как это дубликат? Это о комментариях XML. Речь идет о встроенном комментарии Java. А также с использованием другой библиотеки. –

+0

* «Я хотел бы сделать функцию, которая получает строку, и в случае, если она имеет встроенные комментарии, она удаляет ее». * Зачем вам это делать? – NullUserException

+3

@OP Если вы используете какую-либо стороннюю библиотеку, скажите прямо так со ссылкой на API. –

ответ

1

Попытка

replaceAll("(?s)/\\*.*?\\*/", "") 

Пример:

String code = "/**THIS IS SAMPLE CODE */ public class TestFormatter{public static void main(String[] args){int i =2; String s= \"name\";\\\\u give give change the values System.out.println(\"Hello World\");//sample}}"; 
System.out.println(code.replaceAll("(?s)/\\*.*?\\*/", "")); 

Выход:

public class TestFormatter{public static void main(String[] args){int i =2; String s= "name";\\u give give change the values System.out.println("Hello World");//sample}} 

PS.

, если вы хотите, чтобы удалить последние комментарии //sample}}

Затем используйте split()

System.out.println(code.replaceAll("(?s)/\\*.*?\\*/", "").split("//")[0]); 
// keep in Mind it will also Remove }} from //sample}} 

Выход:

public class TestFormatter{public static void main(String[] args){int i =2; String s= "name";\u give give change the values System.out.println("Hello World"); 
+3

Downvoters Помните, что не комментировать? –

+0

Я не downvoter, но будут проблемы с вашим регулярным выражением, если комментарии, такие как \ * .. * \ или \\, будут помещены в строку. В этом случае они не являются комментариями, а простыми литералами и не должны быть удалены. Анализ кода не так прост и, вероятно, не нужно делать с регулярным выражением ... – Pshemo

+1

@Tarsem: Регулярное выражение похоже на мой ответ. При копировании ответа по крайней мере упоминается автор оригинала. Кстати, я не спустил вниз. – boring

1
replaceAll("((/\\*)[^/]+(\\*/))|(//.*)", "") 

Это позволит удалить одну строку, Mult i-line или doc.

Подходящее JavaScript регулярное выражение: ((/\*)[^/]+(\*/))|(//.*), которое вы можете попробовать с regexpal.com.

+0

не работает.Я получаю сообщение об ошибке. –

+0

@NikhilaBenjaram Какое сообщение об ошибке? – boring

+0

null указатель исключение, на самом деле здесь проблема не в методе replaceAll. Я получаю исключение нулевого указателя в textedit.apply(). если строка не в правильном порядке, тогда код не будет отформатирован в java. –

Смежные вопросы