3

私はいくつかの単純なJavaコードに問題があります:

// 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

私は別のOSでそのコードを試しましたが、1つのソラリスだけがこの問題を抱えています。そしてもちろん、コードはこの特定のサーバーで機能する必要があります。

非表示のconfファイルに設定するのが奇妙なパラメータであるかどうかをどこで確認するかわかりません。

誰が何が起こっているのか考えていますか?concatが挿入コマンドに進化したのはなぜですか?

編集:

私はこのコードで別のjarファイルを作成しました:

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がどのように消えるかわかりますか?

4

2 に答える 2

4

MCHK_DIR環境変数が CR 文字 (キャリッジ リターン、CRLF の最初の部分として知られている) で終わっていることは確かです。

これは、あなたが経験したことをかなり正確に説明しています: の可視部分MCHK_DIRが印刷され、カーソルが行の先頭に配置されます。次に、追加したものが印刷されます(表示されているテキストの先頭を上書きしMCHK_DIRます)。

環境変数を設定するほとんどの方法では、空白文字 (CR など) を簡単に追加できないため、これがどのように発生するかは、私にはやや謎です。

これが実際に当てはまるかどうかを確認するには、変数の文字を繰り返し処理し、それらの値を出力します。

for (char c : METACHEK_pref.toCharArray()) {
  System.out.println("<" + c + ">: " + (int) c);
}
于 2012-11-08T08:30:00.703 に答える
1

@JoachimSauerは正しいと思います。その場合、

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

tirckを行う必要があります。

于 2012-11-08T08:58:23.903 に答える