アプリ開発ときどきアウトドア

主にJavaを使ったアプリ開発やトラブルシューティング等のノウハウ、キャンプや登山の紹介や体験談など。

1. システムエンジニアリング Java

Java正規表現によるパラメータ置換

投稿日:


mybatis-generatorが生成するクエリカスタマイズのために、生成されたクエリ上のパラメータを置換する方法を調べたので記載しておきます。

サンプルプログラム

Java言語の場合、標準ライブラリのPatternクラスで正規表現パターンを作成し、Matcherで検索や置換が行えます。該当箇所を纏めて置換する場合はMatcher#replaceAll()が手っ取り早いが、個々に条件判断して置換する場合は、Matcher#appendReplacement(), Matcher#appendTail()が便利です。

次の例では入力の文字列中の”#{xxx}”部分を”func(#{xxx})”に置き換えるサンプルです。
appendReplacement(), appendTail()の引数はStringBufferになっていますが、Java9以降ではStringBuilderが使えるそうです。

package example.regex;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class RegexReplaceExample1 {

	public static void main(String[] args) {

		String instr = "insert into table1(col1, col2) values(#{abc}, #{xyz})";
		System.out.println("in : " + instr);

		Pattern p = Pattern.compile("\#\{(.*?)\}");
		Matcher m = p.matcher(instr);
		StringBuffer sb = new StringBuffer(); // 置換後文字列を格納
		while (m.find()) {
			String all = m.group(0);
			String part = m.group(1);
			System.out.println("[0]=" + all + ", [1]=" + part);
			String replace = "func(" + all + ")"; // 置換の例
			m.appendReplacement(sb, replace);
		}
		m.appendTail(sb);

		System.out.println("out: " + sb.toString());
	}

}

実行結果は次の通りです。

in : insert into table1(col1, col2) values(#{abc}, #{xyz})
[0]=#{abc}, [1]=abc
[0]=#{xyz}, [1]=xyz
out: insert into table1(col1, col2) values(func(#{abc}), func(#{xyz}))


(adsbygoogle = window.adsbygoogle || []).push({});


(adsbygoogle = window.adsbygoogle || []).push({});

-1. システムエンジニアリング, Java

執筆者:

関連記事

セッションタイムアウトの必要性

「セッションタイムアウトって何で必要なんですかね?」という問いがあった。 その人は「セッションデータの肥大化によるリソース枯渇や性能劣化を防止」という意見。 自分の場合、「それもあるかもしれないが、ど …

開発・検証用のFTPサーバ(IIS)を構築

FTPで外部連携するためのプログラムを開発する際に、接続先のFTPサーバの準備に困る場合があります。 ここでは、Widnwos10上に開発・検証用のFTPサーバを構築するための手順を説明します。 「I …

ASP.NET Core: 変更ページを実行環境に反映

ASP.Net Core(3.0)の開発で、ページ(cshtml)を編集しながらページデザインを確認したい。 既定ではページを変更しても実行環境に反映れずサーバの再起動が必要となり開発効率が悪い。 サ …

テキストファイルマスクツール

本番環境での性能検証でNGになってしまった。 どの処理でどれほどの処理時間がかかっているかを把握するためにログレベルを変更して、ログを取得した。 対応方法を自社の担当者と検討するために、本番環境からこ …

技術検証

Linuxでの gdrive の使い方

wordpressのデータをgoogle driveにバックアップするための基礎調査を行っている。 google driveに接続可能なライブラリは幾つかあるようだが、ここでは無料でお手軽に始められそ …