2013-08-04 75 views
-1
private static String filterString(String code) { 
    String partialFiltered = code.replaceAll("/\\*.*\\*/", ""); 
    String fullFiltered = partialFiltered.replaceAll("//.*(?=\\n)", ""); 
    return fullFiltered; 
} 

我試過上面的代碼來刪除字符串中的所有註釋,但它不工作 - 請幫助。刪除字符串中的註釋

+0

沒有任何的下方回答您的Q& –

回答

0

如何....

 private static String filterString(String code) { 
     return code.Replace("//", "").Replace("/*", "").Replace("*/", ""); 

    } 
+0

實際上我想刪除字符串的所有註釋部分 – Dilshi

+0

對不起,這是你的問題的大小。 ^^ –

+0

可以幫我解決這個問題 – Dilshi

0

替換下面的代碼

partialFiltered.replaceAll("//.*(?=\\n)", "");

有了,

partialFiltered.replaceAll("//.*?\n","\n");

0

你需要在開始使用(?s)partialFiltered re gex允許評論跨越多行(例如見Pattern.DOTALL with String.replaceAll)。

但隨後的/\\*.*\\*/中間.*使用貪婪比賽,所以我希望它來代替兩個獨立的註釋塊之間的一大堆。例如,考慮到以下幾點:

/* Comment #1 */ 
for (i = 0; i < 10; i++) 
{ 
    i++ 
} 
/* Comment #2 */ 

沒有測試過我的臉這使我冒着雞蛋,但希望它取出一大堆,包括在中間,而不是僅僅兩個註釋的代碼。防止的方法之一是使用.*?使內部匹配非貪婪,即儘可能少的匹配:

String partialFiltered = code.replaceAll("(?s)/\\*.*?\\*/", ""); 

由於fullFiltered正則表達式不(?s)開始,它應該沒有(?=\\n)工作(因爲replaceAll正則表達式不跨越多行默認情況下) - 所以你應該能夠將其改爲:

String fullFiltered = partialFiltered.replaceAll("//.*", ""); 

也有可能問題,尋找字符表示註釋,如如果它們出現在字符串或正則表達式模式中,但我認爲這些對於您的應用程序並不重要 - 如果它們可能是使用簡單正則表達式的道路的末端,並且您可能需要解析器而不是...

2

適用於// single和多行/* comments */

String sourceCode = 
     "/*\n" 
     + " * Multi-line comment\n" 
     + " * Creates a new Object.\n" 
     + " */\n" 
     + "public Object someFunction() {\n" 
     + " // single line comment\n" 
     + " Object obj = new Object();\n" 
     + " return obj; /* single-line comment */\n" 
     + "}"; 

System.out.println(sourceCode.replaceAll(
     "//.*|/\\*((.|\\n)(?!=*/))+\\*/", "")); 

輸入

/* 
* Multi-line comment 
* Creates a new Object. 
*/ 
public Object someFunction() { 
    // single line comment 
    Object obj = new Object(); 
    return obj; /* single-line comment */ 
} 

輸出

public Object someFunction() { 

    Object obj = new Object(); 
    return obj; 
} 
0

也許這可以幫助別人:

return code.replaceAll(
       "((['\"])(?:(?!\\2|\\\\).|\\\\.)*\\2)|\\/\\/[^\\n]*|\\/\\*(?:[^*]|\\*(?!\\/))*\\*\\/", "$1"); 

使用這個正則表達式來測試((['"])(?:(?!\2|\\).|\\.)*\2)|\/\/[^\n]*|\/\*(?:[^*]|\*(?!\/))*\*\/here