Javaで特定の単語を除いてファイル内のすべての文字を「#」に置き換えるプログラム
Javaでファイルの内容を処理し、特定の単語だけを残して他のすべての文字を「#」に置き換えたい場面は少なくありません。本記事では、split()メソッドとreplaceAll()メソッドを組み合わせて、この処理を実現する方法を解説します。
使用する主なメソッド
split()メソッドは、Stringクラスに用意されたメソッドで、指定した正規表現に一致する部分を区切りとして現在の文字列を分割します。戻り値の配列には、正規表現に一致する部分文字列で区切られた各部分文字列、あるいは文字列の末尾までの部分文字列が格納されます。
replaceAll()メソッドは、正規表現と置換後の文字列の2つの引数を受け取り、正規表現に一致したすべての箇所を指定した文字列で置き換えます。
処理の手順
ファイル内のすべての文字を、特定の単語を除いて「#」に置き換えるには、以下の手順を実行します。
ファイルの内容を文字列として読み込む
空のStringBufferオブジェクトを作成する
split()メソッドを使って、取得した文字列を単語ごとの配列に分割する
配列の要素を順番に走査する
要素が保護したい単語と一致する場合は、そのままStringBufferに追加する
それ以外の単語は、文字をすべて「#」に置き換えてからStringBufferに追加する
最後にStringBufferをStringに変換して結果を得る
サンプルコード
ここでは、次のような内容のsample.txtというファイルが存在すると仮定します。
Hello how are you welcome to Tutorialspoint we provide hundreds of technical tutorials for free.
以下のプログラムは、ファイルの内容を文字列として読み込み、「Tutorialspoint」という単語を除くすべての文字を「#」に置き換えます。
import java.io.File;
import java.io.FileNotFoundException;
import java.util.Arrays;
import java.util.Scanner;
public class ReplaceExcept {
public static String fileToString() throws FileNotFoundException {
String filePath = "D://input.txt";
Scanner sc = new Scanner(new File(filePath));
StringBuffer sb = new StringBuffer();
String input;
while (sc.hasNextLine()) {
input = sc.nextLine();
sb.append(input);
}
return sb.toString();
}
public static void main(String args[]) throws FileNotFoundException {
String contents = fileToString();
System.out.println("Contents of the file: \n"+contents);
// 単語ごとに分割
String strArray[] = contents.split(" ");
System.out.println(Arrays.toString(strArray));
StringBuffer buffer = new StringBuffer();
String word = "Tutorialspoint";
for(int i = 0; i < strArray.length; i++) {
if(strArray[i].equals(word)) {
buffer.append(strArray[i]+" ");
} else {
buffer.append(strArray[i].replaceAll(".", "#"));
}
}
String result = buffer.toString();
System.out.println(result);
}
}
コードのポイント
fileToString()メソッドでは、Scannerを使ってファイルを1行ずつ読み込み、StringBufferに連結して1つの文字列にしています。
replaceAll(".", "#")の第1引数「.」は正規表現における「任意の1文字」を意味するため、これで単語内のすべての文字を「#」に置き換えられます。
保護したい単語との比較にはequals()メソッドを使用しています。「==」ではなくequals()で比較することが重要です。
実行結果
Contents of the file: Hello how are you welcome to Tutorialspoint we provide hundreds of technical tutorials for free. [Hello, how, are, you, welcome, to, Tutorialspoint, we, provide, hundreds, of, technical, tutorials, for, free.] #######################Tutorialspoint ############################################
実行結果を見ると、「Tutorialspoint」という単語のみ元のまま残り、それ以外のすべての文字が「#」に置き換えられていることが確認できます。
まとめ
このように、split()で文字列を単語単位に分解し、条件分岐とreplaceAll()を組み合わせることで、特定の単語だけを保護しながら他の文字を一括置換できます。マスキング処理やログの匿名化など、さまざまな用途に応用できるテクニックなので、ぜひ覚えておきましょう。
-
【Java入門】ディレクトリ内のすべてのファイルを再帰的に削除するプログラムの書き方
この記事では、Javaを使って指定したディレクトリ内のすべてのファイルを再帰的に削除する方法を解説します。サブディレクトリの中にあるファイルも含めて、ファイルだけを削除し、ディレクトリ構造自体は残すプログラムです。前提となるディレクトリ構成まず、Dドライブ直下に ExampleDirectory というフォルダがあり、その中に7つのファイルと2つのディレクトリが含まれているものと仮定します。SampleDirectory1:SampleFile1.txt と SampleFile2.txt の2つのファイルを含むSampleDirectory2:SampleFile2.txt と Sample
-
【初心者向け】Pythonで文字列内の「a」をすべて「$」に置き換える方法
文字列の中に含まれる特定の文字(ここでは「a」)を、別の文字(ここでは「$」)にすべて置き換えたいケースはよくあります。Pythonでは、文字列を1文字ずつ反復処理しながら「+=」演算子で新しい文字列を組み立てることで、この処理を実現できます。 サンプルコード 以下に、実際の実装例を示します。 my_str = Jane Will Rob Harry Fanch Dave Nancy changed_str = for char in range(0, len(my_str)): if(my_str[char] == a): changed_str += $