2009-12-03 68 views
0

考慮:錯誤而定義字符串常量

public static final String XML_POLICY = 
      "<?xml version="1.0"?>" 
      +"<!DOCTYPE cross-domain-policy SYSTEM "/xml/dtds/cross-domain-policy.dtd">" 
      + "<cross-domain-policy>" 
      + "<allow-access-from domain="*" to-ports="*" />" 
      + "</cross-domain-policy>"; 

我得到的

"<?xml version="1.0"?>" 

它說 ';' 預計編譯錯誤。

+"<!DOCTYPE cross-domain-policy SYSTEM "/xml/dtds/cross-domain-policy.dtd">" 

它說「找不到符號,符號:類XML和類的DTD」

這可能是什麼可能的原因? IDE是Netbeans 6.8 Beta。

+1

netbeans上的相同行爲(不是bug)6.7 – dfa 2009-12-03 23:11:45

回答

3

你需要逃脫雙引號 - 它不只是第一線,無論是文檔類型,並允許存取從線需要它。 。

// Reformatted slightly to avoid scrolling :) 
public static final String XML_POLICY = 
    "<?xml version=\"1.0\"?>" 
    + "<!DOCTYPE cross-domain-policy SYSTEM \"/xml/dtds/cross-domain-policy.dtd\">" 
    + "<cross-domain-policy>" 
    + "<allow-access-from domain=\"*\" to-ports=\"*\" />" 
    + "</cross-domain-policy>"; 

一種替代它的XML,這是在大多數地方的罰款,並使得內使用單引號簡單的代碼如下:

public static final String XML_POLICY = 
    "<?xml version='1.0'?>" 
    +"<!DOCTYPE cross-domain-policy SYSTEM '/xml/dtds/cross-domain-policy.dtd'>" 
    + "<cross-domain-policy>" 
    + "<allow-access-from domain='*' to-ports='*' />" 
    + "</cross-domain-policy>"; 

請注意,沒有任何Netbeans或XML特定於此。雙引號用於表示字符串的開始和結束,這就是爲什麼如果你想在中間需要一個字符串就需要將其轉義。例如:

String x = "I said, \"Hello.\" The child laughed."; 

在Java中各種其他的轉義序列 - 見section 3.10.6 of the language specification瞭解更多詳情。

+1

爲了完整起見,+1 – dfa 2009-12-03 23:14:50

+0

希望我能對此做一個+10! – 2009-12-03 23:19:42

2

你必須跳出「裏面的字符串:

public static final String XML_POLICY =  
     "<?xml version=\"1.0\"?>" + // etc etc 
0

我覺得這個問題很好回答,而只是一個音符/提示:
感謝語法高亮,文本的一部分應了不同的色彩,表明它不是字面的一部分。
Netbeans 必須啓用語法高亮(默認?)。 Stackoverflow也有語法高亮顯示,只需看問題中的代碼(上面)。