【Java】JSPでタグライブラリを使う(JSTL)
こんにちは。エンジニアの新田です!ここでは、システムエンジニアとして働いている私が、システム開発手法や開発言語について紹介していこうと思います。今回は、JSPの標準タグライブラリ「JSTL」について紹介します。Javaについて勉強している方、Webアプリケーションを構築したいと思っている方の参考になれば幸いです!関連記事リンク: 【Java】JSPの基本的な構文/【Java】JSPのアクションタグ
Workteria(ワークテリア)では難易度の高いものから低いものまで、スキルや経験に合わせた案件を多数揃えています。会員登録は無料ですので、ぜひ会員登録してご希望の案件を探してみてください!
フリーランス/正社員のエンジニアとして活躍するには、ご自身のスキルや経験に合わせた仕事を選ぶことが大切です。ご希望の案件がみつからない場合はお気軽にお問い合わせください!ユーザ満足度の高いキャリアコンサルタントが在籍していますので、希望条件や悩み事などなんでもご相談ください。ご希望にピッタリの案件をご紹介させていただきます。
こんにちは。新人エンジニアのサトウです。
システムエンジニアとして駆け出したばかりですが、
初心者なりの視点でわかりやすい記事を心がけていますので参考になればうれしいです。
プログラム初心者✅にも、プログラムに興味がある人✨も、
短い時間で簡単にできますのでぜひこの記事を読んで試してみてください!
特定の要素を持つ複数の文字列や数値を一つのパターンで表す記述法を正規表現といいます。
引数に正規表現のパターンを指定することによって、
パターンの要素を持つ文字列をまとめて操作するといった処理を行うことができるようになります。
正規表現を使うことによって、文字列検索や文字列操作の作業効率が非常に向上します。
正規表現の情報量は膨大で全てを完璧に習得するにはかなりの時間かかりますが、
Javaに限らず他のプログラミング言語でも同じように使うことができるため
しっかりと身につければ大いに役立つことは間違いありません。
先ず正規表現の仕様についてしっかりと理解をすることが重要になってきます。
正規表現によるパターンは通常の文字とメタ文字(特殊文字)という特殊な記号を組み合わせて記述します。
メタ文字とは、 . + * ^ $ などの記号です。
以下の5つのパターンはすべて正規表現の例です、正規表現パターンのイメージを掴みましょう。
a...o ^abc xyz$ ^123\d \d{5} 等
例えば「.(ピリオド)」は正規表現において”任意の一文字”を表しています。
ですので a...o は最初がa最後がoで終わり間に3つの任意の文字が続く5つの文字を表しています。
aiueo axyzo a123o aいうえo などがこのパターンにマッチするということになります。
以下の表が基本的な正規表現で使用する記号です。これらを組み合わせて、様々なパターンを表すことができます。
これらの記号を組み合わせて、よく表される正規表現の表記の例を以下の図で確認しましょう!
正規表現のパターンにおいて、
意義のあるメタ文字 . * + () ^ $ は記号そのままの表記では表すことができません。
表記したい場合はエスケープシークエンスのように、
先頭にバックスラッシュ(『/』の左右反対記号)、または『\』マークをつけることで、
そのままの記号を使うことができるようになります。覚えておきましょう!
参考:【Java】Stringクラスformatメソッドの文字列整形とエスケープシーケンス
Javaの正規表現は、java.util.regex.Patternクラスで定義されています。
javaで使用可能な正規表現が、javadoc-Patternクラスに載っているので是非確認してください。
またこのクラスには正規表現を格納したオブジェクト(Patternオブジェクト&Macherオブジェクト)
を生成するメソッドが実装されています。
参考リンク:javadoc-Pattern
正規表現のパターンを解釈し、
文字列とのマッチング操作を行うメソッドがMatcherクラスに実装されています。
参考リンク:Javadoc-Matcher
ここではこの二つのクラスを利用した正規表現の使い方について紹介していきます。
Patternクラスに実装されているメソッドを利用して正規表現のオブジェクトを生成していきます。
Patternクラスのcomplieメソッドは、正規表現をパターンオブジェクトに格納します。
引数に正規表現を指定します。
Pattern compile(String regex)
PatternクラスのmacherメソッドでMatcherオブジェクトを生成することができます。
引数にパターンとマッチさせる文字列を指定して文字列と正規表現のパターンを格納したオブジェクトが生成されます。
このMacherオブジェクトは、Macherクラスのメソッドを使ってマッチング操作を行うことができます。
Matcher matcher(文字列)
上記の二つのメソッドを使用して、
Macherオブジェクトを生成するまで流れを実際のコードで確認しましょう。
サンプルコード
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Test {
public static void main(String[] args) {
String s = "東京都千代田区";
String s1 = "東京都台東区";
String t = "自然保護区";
//正規表現
String regex="東京都.{1,3}区";
//Patternオブジェクトに正規表現をコンパイル
Pattern p = Pattern.compile(regex);
//Matcherオブジェクトを生成
Matcher m = p.matcher(s);
Matcher m1 = p.matcher(s1);
Matcher m2 = p.matcher(t);
}
}
文字列と正規表現パターンが格納(コンパイル)されたMacherオブジェクトの生成までを行うことが出来ました。
(サンプルコードでは、Macherオブジェクトm,m1,m2の3つが生成!)
このオブジェクトを次の項で実際に使っていきます!!
前項で生成したMatcherオブジェクトにMacherクラスのメソッドを使用して、
文字列と正規表現パターンのマッチング操作をすることができます。
Macherクラスには三種類のマッチング確認用メソッドが実装されています。
matchesメソッド 文字列がパターンにすべてマッチする場合にtrueを返す。
boolean matches()
lookingAtメソッド 文字列の先頭部分(接頭辞)がパターンとマッチする場合にtrueを返す。
boolean lookingAt()
findメソッド 文字列の中にマッチするパターンがある場合にtrueを返す。
boolean find()
findメソッドには、前回のマッチ成功時の終了インデックスから走査するという仕様があります。
最初からマッチング操作をし直す時にはresetメソッドを使用しましょう。
Matcher reset()
サンプルコードで使い方を確認します。
◆サンプルコード
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Test {
public static void main(String[] args) {
String s = "東京都千代田区";
String s1 = "東京都台東区上野";
String t = "自然保護区";
//正規表現
String regex = "東京都.{1,3}区";
//Patternオブジェクトに正規表現をコンパイル
Pattern p = Pattern.compile(regex);
//Matcherオブジェクトを生成
Matcher m = p.matcher(s);
Matcher m1 = p.matcher(s1);
Matcher m2 = p.matcher(t);
//Matcherクラスのmatchesメソッド
System.out.println("----matches----");
System.out.println(m.matches());
System.out.println(m1.matches());
System.out.println(m2.matches());
//MatcherクラスのlookingAtメソッド
System.out.println("----lookingAt----");
System.out.println(m.lookingAt());
System.out.println(m1.lookingAt());
System.out.println(m2.lookingAt());
//リセット(findメソッドを正常に使うため)
m.reset();
m1.reset();
m2.reset();
//Matcherクラスのfindメソッド
System.out.println("----find----");
System.out.println(m.find());
System.out.println(m1.find());
System.out.println(m2.find());
}
}
◆出力結果
----matches----
true
false
false
----lookingAt----
true
true
false
----find----
true
true
false
文字列がパターンとマッチしているかどうか調べた後に、
マッチした文字列の詳細情報を得たい場合は以下のメソッドが使えます。
ここでは三種類紹介します。
startメソッド パターンとマッチした文字列の開始インデックス(begin index)を戻り値として返す。
int start()
endメソッド パターンとマッチした文字列の末尾インデックス(end index)を戻り値として返す。
int end()
groupメソッド パターンにマッチした文字列を返す。
String group()
サンプルコードで確認しましょう。
ここではfindメソッドを実行後に詳細情報を取得します!
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Test {
public static void main(String[] args) {
String s = "東京都千代田区";
String s1 = "東京都台東区上野";
//正規表現
String regex = "東京都.{1,3}区";
//Patternオブジェクトに正規表現をコンパイル
Pattern p = Pattern.compile(regex);
//Matcherオブジェクトを生成
Matcher m = p.matcher(s);
Matcher m1 = p.matcher(s1);
System.out.println("----findメソッド----");
System.out.println("m:"+m.find());
System.out.println("m1:"+m1.find());
System.out.println("----startメソッドとendメソッド----");
System.out.println("m:begin["+m.start()+"]end["+m.end()+"]");
System.out.println("m1:begin["+m1.start()+"]end["+m1.end()+"]");
System.out.println("----groupメソッド----");
System.out.println("m:"+m.group());
System.out.println("m1:"+m1.group());
}
}
出力結果
----findメソッド----
m:true
m1:true
----startメソッドとendメソッド----
m:begin[0]end[7]
m1:begin[0]end[6]
----groupメソッド----
m:東京都千代田区
m1:東京都台東区
検索対象の文字列内にマッチするパターンが二つ以上存在する場合に、
繰り返し文(while文)でfindメソッドを使用することにより、
文字列内のマッチする文字列をすべて検索することができます。
マッチする文字列が複数入った文字列を使って、
while文の中でfindメソッドを使ったサンプルコードを確認しましょう。
サンプルコード
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Test {
public static void main(String[] args) {
//マッチする文字列が複数入った文字列の用意
String u = "東京都千代田区,東京都台東区,東京都港区";
//Matcherオブジェクトを生成まで
String regex = "東京都.{1,3}区";
Pattern p = Pattern.compile(regex);
Matcher m = p.matcher(u);
//繰り返し文
while(m.find()){
System.out.println(m.group());
}
}
}
出力結果
東京都千代田区
東京都台東区
東京都港区
Stringクラスの文字列を操作するメソッドの中には
引数に正規表現のパターンを指定できるものがあります。
以下のような操作が例に挙げられます。
比較(matches)
分割(split)
置換(replaceAll,replaceFirst)
メソッドの詳細な使い方については以下の記事で紹介しています。
【Java】Stringクラスについての理解と基本的な文字列操作
ここでは置換(replaceAll)操作のサンプルコードを確認してみましょう。
String replaceAll(文字列or正規表現, 置換する文字列)
サンプルコード
public class Test {
public static void main(String[] args) {
String format = "東京都千代田区";
String change = "台東区";
String str =format.replaceAll(".{1,3}区", change);
System.out.println(str);
}
}
出力結果
東京都台東区
第一引数で指定した正規表現のパターンとマッチした変数format文字列内の部分文字が、
第二引数で指定した文字列に置き換わっています。
・・・・ ・・・
東京都千代田区 ⇒東京都台東区
これが正規表現を使った置換です。他のString操作もリンク記事を参考に実際にコードを書いて動かすと面白いと思います!
【著者】
読者を始め私自身も知りたい!と思うような知って得するプログラミング知識やIT情報を日々発信中です。
教養のあるカッコいい大人になれるよう、プログラミングを始め興味関心を持ったことを毎日勉強しております !!
そのような方はぜひ、Workteriaサイトをご利用ください!
定期的にご本人に合う高額案件を紹介
リモートワークなど自由な働き方ができる案件多数
専属エージェントが契約や請求をトータルサポート
こんにちは。エンジニアの新田です!ここでは、システムエンジニアとして働いている私が、システム開発手法や開発言語について紹介していこうと思います。今回は、JSPの標準タグライブラリ「JSTL」について紹介します。Javaについて勉強している方、Webアプリケーションを構築したいと思っている方の参考になれば幸いです!関連記事リンク: 【Java】JSPの基本的な構文/【Java】JSPのアクションタグ
こんにちは。新人エンジニアのサトウです。システムエンジニアとして駆け出したばかりですが、初心者なりの視点でわかりやすい記事を心がけていますので参考になればうれしいです。プログラム初心者✅にも、プログラムに興味がある人✨も、短い時間で簡単にできますのでぜひこの記事を読んで試してみてください!そもそもStringとは何?『 String 』... Java言語において文字列のデータ型を指します。基本デ
こんにちは。新人エンジニアのサトウです。システムエンジニアとして駆け出したばかりですが、初心者なりの視点でわかりやすい記事を心がけていますので参考になればうれしいです。プログラム初心者✅にも、プログラムに興味がある人✨も、短い時間で簡単にできますのでぜひこの記事を読んで試してみてください!Stringクラスformatメソッドの文字列整形【java.utilパッケージ】Formatterクラスfo
こんにちは。新人エンジニアのサトウです。システムエンジニアとして駆け出したばかりですが、初心者なりの視点でわかりやすい記事を心がけていますので参考になればうれしいです。プログラム初心者にも✅、プログラムに興味がある人✨も、短い時間で簡単にできますのでぜひこの記事を読んで試してみてください!文字列を扱う3つのクラス【java.langパッケージ】java.langパッケージの文字列を扱うクラスにはS
こんにちは。新人エンジニアのサトウです。システムエンジニアとして駆け出したばかりですが、初心者なりの視点でわかりやすい記事を心がけていますので参考になればうれしいです。プログラム初心者✅にも、プログラムに興味がある人✨も、短い時間で簡単にできますのでぜひこの記事を読んで試してみてください!プリミティブ型と参照型プログラム開発では型を持った変数を使ってデータのやり取りをしますが、データ型によって仕様