2012-11-08 62 views
3

我在與一些簡單的Java代碼的麻煩:意外使用concat行爲

// the env var is set 
public final String METACHEK_pref = System.getenv().get("MCHK_DIR"); 
// the env var should be : 
public String tempMP = "/disk3/METACHECK/Metacheck/metachek"; 

System.out.println("#1:"+METACHEK_pref+File.separator+"metachek"); 
System.out.println("#2:"+tempMP+File.separator+"metachek"); 

它打印:

#1:/metachekTACHECK/Metacheck/metachek 
#2:/disk3/METACHECK/Metacheck/metachek/metachek 

我試過在不同的操作系統代碼,只是一個在solaris有這個問題。當然,代碼必須在這個特定的服務器上工作。

我不知道在哪裏檢查是否有一些奇怪的參數設置在隱藏的conf文件中。

任何人有一個想法是怎麼回事?爲什麼concat已經演變爲插入命令?

編輯:

我創建了這個代碼另一個罐子:

public class test { 

    /** 
    * @param args 
    */ 
    public static void main(String[] args) { 
     // TODO Auto-generated method stub 


     String METACHEK_pref = new String(System.getenv().get("MCHK_DIR").toString()); 
     String tempMP = "/disk3/METACHECK/Metacheck/metachek"; 

     System.out.println("#1:"+METACHEK_pref); 
     System.out.println("#2:"+METACHEK_pref+File.separator+"metachek"); 
     System.out.println("#3:"+tempMP+File.separator+"metachek"); 



    } 

} 

,這是輸出:

#1:/disk3/METACHECK/Metacheck/metachek 
/metachek/METACHECK/Metacheck/metachek 
#3:/disk3/METACHECK/Metacheck/metachek/metachek 

見#2是如何消失?

+0

你確定MCHK_DIR變量是否真的設置爲你所期望的? –

+0

是的,它是一個系統env var。正如你在第一個sysout中看到的,路徑很好,但是concat部分是壞的地方 – user1808484

+3

@ user1808484首先打印METACHEK_pref,請 – logoff

回答

4

我相當肯定的是,MCHK_DIR環境變量CR字符(回車,更好地被稱爲 - 第一部分的-CRLF)結束。

這正好解釋了您的體驗:打印MCHK_DIR的可見部分並將光標放在該行的開頭。然後,您附加的東西被打印出來(覆蓋可見的MCHK_DIR文本的開頭)。

如何發生這種情況是有點神祕的對我來說,作爲設置環境變量很多方面不很容易地添加一個空格字符(如CR)。

要檢查,如果這是事實確實如此,遍歷您的變量的字符和打印他們的價值觀:

for (char c : METACHEK_pref.toCharArray()) { 
    System.out.println("<" + c + ">: " + (int) c); 
} 
+0

這裏是METACHEK_pref的最後一個字符: >:13 所以,你說得對!謝謝 ! – user1808484

1

我猜,@Joachim紹爾是正確的。 如果是的話,

String METACHEK_pref = System.getenv("MCHK_DIR").trim(); 

應該做的tirck。