2012-11-08 36 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。