5

System.out.printlnJava コードからのすべての出現箇所を削除/コメントしたいと考えています。これは、、、または任意の場所にSystem.out.printlnある可能性があります。ソースコードファイルが大きいため、手動で行うことはできません。ifif elseforwhile

このプロセスを自動化するのを手伝ってください。このタスクに使用できるリファクタリング ツールはありますか? これにEclipse JDTを使用できますか?

4

7 に答える 7

6

アップデート

ここで述べたように、 NullOutPut を作成します

public final DevNull { 
    public final static PrintStream out = new PrintStream(new OutputStream() {
        public void close() {}
        public void flush() {}
        public void write(byte[] b) {}
        public void write(byte[] b, int off, int len) {}
        public void write(int b) {}

    } );
}

System.out.printと置き換えますDevNull.out.print

その後、簡単に処理できるログ フレームワークに切り替えます


リンク済み

于 2012-12-26T17:54:01.513 に答える
3

ソースコードファイルで生の検索/置換機能を使用してステートメントをコメントアウト (または削除) することもできますが、どのような正規表現も簡単に壊れてしまう可能性があるため、log4j や slf4j などのロギング フレームワークに注意した方がよいでしょう。

まず全体像: 通常の を使用する代わりに、System.out.println()次のようなコード行を使用することになります。

logger.debug("Just entered main");

ロギング フレームワークは単純なプロパティ ファイルで構成できるため、複数のアペンダー (コンソール、ファイル、データベースなど) を用意し、必要に応じてそれぞれを個別にシャットダウンできます (たとえば、コンソール アペンダー)。ロギング API に切り替えるには、ソース ファイルに対して未加工の検索/置換を実行する必要があります。また、IDE 内で、または次のようなコマンドを使用して、いくつかのことを手動で修正する必要があります。

find src/ -name '*.java' | \
xargs sed -i -e 's/System.out.println/logger.verbose/g'
于 2012-12-26T18:02:25.210 に答える
2

Jigar Joshi が言ったように、検索と置換のアプローチを使用すると、特にSystem.out.println.

ソースコードを編集/変更する必要がない場合は、別の解決策を提案します。ドライバー プログラムでストリームを無効にするSystem.outと、これらのステートメントによって何も出力されなくなります。次のように設定するだけです。

System.setOut(new PrintStream(new OutputStream() {
    public void write(int b) {
        // No operation.
    }
    public void close() {}
    public void flush() {}
    public void write(byte[] b) {}
    public void write(byte[] b, int off, int len) {}
    public void write(int b) {}
}));
于 2012-12-26T18:03:49.337 に答える
2

Linux で IDE を使用しない場合:

sed '/System.out.println/d' %YOUR_PROJ_DIR%/*.java

Windows では、cygwin がインストールされていれば同じことができます。

于 2012-12-26T17:57:31.097 に答える
1

jEdit テキスト エディターを使用して、このようなタスクを実行しました。おそらく、同じことができる他のテキスト エディターがあります。重要な機能は、ディレクトリ/サブディレクトリの検索と置換です。

  1. 検索と置換のダイアログを開きます。
  2. 検索フォルダーとサブディレクトリのオプションがオンになっていることを確認します。 繰り返しますが、これはプロジェクト全体で物事を処理するための鍵です。
  3. 検索フィールドに「System.out.println」と入力します。引数を処理する正規表現を記述します。
  4. 置換フィールドに //System.out.println またはおそらくより安全な "/*System.out.println*/" を書き込みます (または、それが望ましい場合は空白のままにします)。正規表現の一致を使用して、元の引数を関数に置き換えます。
  5. すべてが期待どおりに進んでいることを確認するために、最初のいくつかのオカレンスを手動で置き換えることをお勧めします。それが正しいと確信したら、[すべて置換] をクリックして祝います。

私は Java プログラマーではありませんが、このソリューションはどの言語でも機能するはずです。それが役立つことを願っています。幸運を!

于 2012-12-26T18:08:14.567 に答える
0

簡単な検索と置換を行います。それはすべきです。

于 2012-12-26T17:54:14.580 に答える
0

System.out.printlnコンソールに何も出力しないように、アプリケーションですべてを作成できます。次のようなクラスを作成します。

import java.io.PrintStream;


public class MyStream extends PrintStream {
   private static final MyStream INSTANCE = new MyStream();

   public static void init() {
      System.setOut(INSTANCE);
   }

   private MyStream() {
      super(System.out);
   }

   @Override
   public void println(Object x) {
      return;
   }

   @Override
   public void println(String x) {
      return;
   }
}

次のように使用します。

public class Test {

    public static void main(String... args) {
        MyStream.init();
        System.out.println("This line will not print");
    }
}

はもう印刷されません。

于 2012-12-26T18:14:09.610 に答える