【Java】JSPでタグライブラリを使う(JSTL)
こんにちは。エンジニアの新田です!ここでは、システムエンジニアとして働いている私が、システム開発手法や開発言語について紹介していこうと思います。今回は、JSPの標準タグライブラリ「JSTL」について紹介します。Javaについて勉強している方、Webアプリケーションを構築したいと思っている方の参考になれば幸いです!関連記事リンク: 【Java】JSPの基本的な構文/【Java】JSPのアクションタグ
Workteria(ワークテリア)では難易度の高いものから低いものまで、スキルや経験に合わせた案件を多数揃えています。会員登録は無料ですので、ぜひ会員登録してご希望の案件を探してみてください!
フリーランス/正社員のエンジニアとして活躍するには、ご自身のスキルや経験に合わせた仕事を選ぶことが大切です。ご希望の案件がみつからない場合はお気軽にお問い合わせください!ユーザ満足度の高いキャリアコンサルタントが在籍していますので、希望条件や悩み事などなんでもご相談ください。ご希望にピッタリの案件をご紹介させていただきます。
こんにちは。新人エンジニアのサトウです。
システムエンジニアとして駆け出したばかりですが、
初心者なりの視点でわかりやすい記事を心がけていますので参考になればうれしいです。
プログラム初心者✅にも、プログラムに興味がある人✨も、
短い時間で簡単にできますのでぜひこの記事を読んで試してみてください!
引数の値を任意の書式に編集して、文字列内に置き換えることができるのがformatメソッドです。
Formatter format(Locale l,書式文字列, Object...)
Formatter format(書式文字列, Object... )
書式指示子を含んだ文字列(書式文字列)を引数に指定します。
指示子の構成によって任意の書式を指定します。
書式指示子についての詳細は下記(目次参照)に掲載しています。
まずはformatメソッドの使い方のイメージを掴みましょう。
◆実装例
import java.util.Formatter;
public class Test {
public static void main(String[] args) {
Formatter fm = new Formatter();
fm.format("HELLO %S", "format");
System.out.println(fm);
}
}
◆出力結果
HELLO FORMAT
①java.langパッケージStringクラスに実装されているformatメソッド
②java.ioパッケージPrintStreamクラスに実装されているformatメソッド
③java.ioパッケージPrintWriterクラスに実装されているformatメソッド
④System.out.printf()
※内部ではFormatterクラスのインスタンスメソッドを呼び出しています。
実は同じような文字列整形が可能です。
String String.format(書式文字列, Object...)
System.out.printf(書式文字列, Object...)
◆①と④の実装例
public class Test {
public static void main(String[] args) {
String s = String.format("GOOD %S", "format");
System.out.println(s);
System.out.printf("GREAT %S", "format");
}
}
◆出力結果
GOOD FORMAT
GREAT FORMAT
本記事で紹介しているFormatメソッドは
指示子の構成によって引数を任意の書式へ編集し文字列に組み込むことができる点で
java.textパッケージMessageFormatクラスに実装されているformatメソッドと異なります。
参考リンク:【Java】MessageFormatクラスでの文字列置換
★以下の説明からString.formatメソッドを使用して解説していきます。
一般(文字、数値型など)の書式指示子では、次の構文が使用されます。
% [argument_index+$] [flags] [width] [.precision] conversion
書式指示子に指定されている書式を確認しましょう。
今回は例として、全ての要素を使用したこちらの書式指示子を使います。
[%1$08.2f]の書式指示子は、
0埋め(flags)/最小文字数’8’(width)/小数第2位まで表示(precision)の書式が指定されています。
引数リストの第一引数(1$)である’1234.5678’が、これらの指定書式に変換され、文字列整形されます。
◆実装例
public class Test {
public static void main(String[] args) {
String s = String.format("文字列整形:%1$08.2f", 1234.5678);
System.out.println(s);
}
}
◆出力結果
文字列整形:01234.57
前項の例のように値を任意の書式に変換して文字列整形することがformatメソッドでは可能になります。
ここでは要素の書き方(書式)と主な使い方を紹介します。
argument_index+$
conversion(値の型)
- 文字列
- 数値
- 日時/時刻
frags(出力形式)
- 左寄せ/右寄せ
- カンマ区切り
- 0埋め
width(最小文字数)とprecision(桁数)
- 文字数指定
より詳細な書式指示子の概要は、javadoc-Formatterを参照してください。
’argument_index+$’ は、引数リスト内の引数の位置を表す要素です。
最初の引数は「1$」、2番目の引数は「2$」で参照されていきます。
省略すると、書式文字列内の書式指示子の順番と、引数リストの順番が対応するようになっています。
大文字はそれぞれの小文字の概要と同じです。出力はString.toUpperCase()を呼び出したことになります。
いつくかの異なるconversionを指定したformatメソッドの使い方を確認しましょう。
public class Test {
public static void main(String[] args) {
String s = String.format("①[%1$s]②[%1$S]③[%2$s]④[%3$s]⑤[%4$s]",
"format",12345,1234.5,null);
System.out.println(s);
}
}
出力結果
①[format]②[FORMAT]③[12345]④[1234.5]⑤[null]
浮動小数点は小数第6位までをデフォルトで表示します。
public class Test {
public static void main(String[] args) {
String s = String.format("10進数[%1$d]8進数[%1$o]16進数[%1$x]浮動小数点[%2$f]",
12345,1.2345);
System.out.println(s);
}
}
出力結果
10進数[12345]8進数[30071]16進数[3039]浮動小数点[1.234500]
引数にnullが指定されている場合はfalseになります。
public class Test {
public static void main(String[] args) {
String s = String.format("①[%1$b]②[%1$B]③[%2$B]④[%3$b]",true,false,null);
System.out.println(s);
}
}
出力結果
①[true]②[TRUE]③[FALSE]④[false]
日付/時刻を指定したい時は「%t」または「%T」が接頭辞になります。後に以下の書式を指定する必要があります。
下記では日付時刻を文字列にフォーマットするformatメソッドの主な使い方を紹介しています。
日付時刻に関して詳しく知りたい方はリンク先を参考にしてください。
【Java】日付時刻(新API‐Java8) - 日時比較・日時演算
【Java】日付時刻(新API‐Java8) - フォーマット
【Java】日時取得(従来API)-java.util.Date, java.util.Calendar
【Java】日付時刻(従来のAPI) - 操作(計算、比較、フォーマット)
import java.time.LocalDate;
import java.util.Date;
public class Test {
public static void main(String[] args) {
//Dateクラスを使った日付時刻取得(旧API)
Date date = new Date();
String s = String.format("①%tY年/%ty年②%tm月③%td日/%te日"
+"%n"//行区切り文字
+"④%tB/%tb⑤%tA/%ta⑥%tj",
date,date,date,date,date,
date,date,date,date,date);
System.out.println(s);
//java.timeパッケージ日付時刻取得(DateAndTime API-Java8)
String t = String.format("1⃣%tY年/%ty年2⃣%tm月3⃣%td日/%te日"
+"%n"
+"4⃣%tB/%tb5⃣%tA/%ta6⃣%tj",
LocalDate.now(),LocalDate.now(),LocalDate.now(),
LocalDate.now(),LocalDate.now(),LocalDate.now(),
LocalDate.now(),LocalDate.now(),LocalDate.now(),
LocalDate.now());
System.out.println(t);
}
}
出力結果
①2020年/20年②08月③01日/1日
④8月/8月⑤土曜日/土⑥214日
1⃣2020年/20年2⃣08月3⃣01日/1日
4⃣8月/8月5⃣土曜日/土6⃣214日
public class Test {
public static void main(String[] args) {
//Dateクラスを使った日付時刻取得(旧API)
Date date = new Date();
String s = String.format("①%tH時/%tI時②%tk時/%tl時③%tM分%tS秒%tL"
+"%n"//行区切り文字
+"④%tp",
date,date,date,date,date,
date,date,date,date,date);
System.out.println(s);
//java.timeパッケージ日付時刻取得(DateAndTime API-Java8)
String t = String.format("1⃣%tH時/%tI時2⃣%tk時/%tl時3⃣%tM分%tS秒%tL"
+"%n"
+"4⃣%tp",
LocalTime.now(),LocalTime.now(),LocalTime.now(),
LocalTime.now(),LocalTime.now(),LocalTime.now(),
LocalTime.now(),LocalTime.now(),LocalTime.now(),
LocalTime.now());
System.out.println(t);
}
}
出力結果
①16時/04時②16時/4時③35分09秒438
④午後
1⃣16時/04時2⃣16時/4時3⃣35分09秒564
4⃣午後
import java.time.LocalDate;
import java.time.LocalTime;
import java.time.ZonedDateTime;
import java.util.Date;
public class Test {
public static void main(String[] args) {
//Dateクラスを使った日付時刻取得(旧API)
Date date = new Date();
String s = String.format("①%tR②%tT③%tr④%tD%n⑤%tF⑥%tc",
date,date,date,date,date,date);
System.out.println(s);
//java.timeパッケージ日付時刻取得(DateAndTime API-Java8)
String t = String.format("1⃣%tR2⃣%tT3⃣%tr4⃣%tD3%n5⃣%tF6⃣%tc",
LocalTime.now(),LocalTime.now(),LocalTime.now(),
LocalDate.now(),LocalDate.now(),ZonedDateTime.now());
System.out.println(t);
}
}
出力結果
①16:51②16:51:19③04:51:19 午後④08/17/20
⑤2020-08-17⑥月 8月 17 16:51:19 JST 2020
1⃣16:512⃣16:51:193⃣04:51:19 午後4⃣08/17/203
5⃣2020-08-176⃣月 8月 17 16:51:19 JST 2020
flags指定とともにwidthを指定します。
public class Test {
public static void main(String[] args) {
String s = String.format("左寄せ:文字[%1$-8S]数字[%2$-8d]/右寄せ:数字[%2$ 8d]",
"FORMAT",12345);
System.out.println(s);
}
}
出力結果
左寄せ:文字[FORMAT ]数字[12345 ]/右寄せ:数字[ 12345]
flags「,」を指定するとロケール固有の区切り文字が追加されます、
今回はロケール無指定(デフォルト)なので、千桁ごとに,(カンマ)が追加されます。
public class Test {
public static void main(String[] args) {
String s = String.format("カンマ区切り:整数[%,d]浮動小数点[%,.3f]",
123456789,123456.789);
System.out.println(s);
}
}
出力結果
カンマ区切り:整数[123,456,789]浮動小数点[123,456.789]
flags指定とともにwidthを指定します。
public class Test {
public static void main(String[] args) {
String s = String.format("0埋め[%09d]",12345);
System.out.println(s);
}
}
出力結果
0埋め[000012345]
widthやprecisionを使って最大文字数や最小文字数を指定することができます。
浮動小数点は小数第6位までをデフォルトで表示します。小数第6位までを含めた最小文字数を指定します。
public class Test {
public static void main(String[] args) {
String s = String.format("最小文字数指定:文字[%8S]整数[%8d]浮動小数点[%12f]",
"FORMAT",12345,1234.5);
System.out.println(s);
String t = String.format("最大文字数指定:文字[%.3S]浮動小数点[%.3f]",
"FORMAT",1.2345);
System.out.println(t);
}
}
出力結果
最小文字数指定:文字[ FORMAT]整数[ 12345]浮動小数点[ 1234.500000]
最大文字数指定:文字[FOR]浮動小数点[1.235]
本記事では、文字列内に特殊な文字を埋め込む点で「書式指示子」と知識が混在してしまいがちである
「エスケープシーケンス」も一緒に紹介します!両者をしっかりと区別して覚えましょう!
そもそもエスケープシーケンス【escape sequence】とは
通常は表記できない特殊な文字を文字列の中に混在させるために規定された特殊な記号や組み合わせのこと。
先頭にバックスラッシュ(『/』の左右反対記号)、または『\』マークをつける。
CSVデータファイルなどを使用して
改行文字をデータベースに取込む場合や改行文字をメッセージの一部として表示する場合にエスケープシーケンス(エスケープ文字)を使用します。
javaで使用できる代表的なエスケープシーケンスを確認しましょう。
以下が主なエスケープ文字の使い方です。
public class Test {
public static void main(String[] args) {
String s = "TOKYOITCOLLEGE初心者から学べる"
+ "オンラインプログラミング学習"
+ "コーディネーターが案件探しのサポートや"
+ "疑問や相談に乗ります。";
System.out.println(s);
String t = "\"TOKYO\tIT\tCOLLEGE\"\t初心者から学べる\n"
+ "オンラインプログラミング学習\r"
+ "コーディネーターが案件探しのサポートや\n"
+ "疑問や相談に乗ります。";
System.out.println(t);
}
}
出力結果
TOKYOITCOLLEGE初心者から学べるオンラインプログラミング学習コーディネーターが案件探しのサポートや疑問や相談に乗ります。
"TOKYO IT COLLEGE" 初心者から学べる
オンラインプログラミング学習
コーディネーターが案件探しのサポートや
疑問や相談に乗ります。
【著者】
読者を始め私自身も知りたい!と思うような知って得するプログラミング知識やIT情報を日々発信中です。
教養のあるカッコいい大人になれるよう、プログラミングを始め興味関心を持ったことを毎日勉強しております !!
そのような方はぜひ、Workteriaサイトをご利用ください!
定期的にご本人に合う高額案件を紹介
リモートワークなど自由な働き方ができる案件多数
専属エージェントが契約や請求をトータルサポート
こんにちは。エンジニアの新田です!ここでは、システムエンジニアとして働いている私が、システム開発手法や開発言語について紹介していこうと思います。今回は、JSPの標準タグライブラリ「JSTL」について紹介します。Javaについて勉強している方、Webアプリケーションを構築したいと思っている方の参考になれば幸いです!関連記事リンク: 【Java】JSPの基本的な構文/【Java】JSPのアクションタグ
こんにちは。新人エンジニアのサトウです。システムエンジニアとして駆け出したばかりですが、初心者なりの視点でわかりやすい記事を心がけていますので参考になればうれしいです。プログラム初心者✅にも、プログラムに興味がある人✨も、短い時間で簡単にできますのでぜひこの記事を読んで試してみてください!そもそもStringとは何?『 String 』... Java言語において文字列のデータ型を指します。基本デ
こんにちは。新人エンジニアのサトウです。システムエンジニアとして駆け出したばかりですが、初心者なりの視点でわかりやすい記事を心がけていますので参考になればうれしいです。プログラム初心者にも✅、プログラムに興味がある人✨も、短い時間で簡単にできますのでぜひこの記事を読んで試してみてください!文字列を扱う3つのクラス【java.langパッケージ】java.langパッケージの文字列を扱うクラスにはS
こんにちは。新人エンジニアのサトウです。システムエンジニアとして駆け出したばかりですが、初心者なりの視点でわかりやすい記事を心がけていますので参考になればうれしいです。プログラム初心者✅にも、プログラムに興味がある人✨も、短い時間で簡単にできますのでぜひこの記事を読んで試してみてください!プリミティブ型と参照型プログラム開発では型を持った変数を使ってデータのやり取りをしますが、データ型によって仕様
こんにちは、駆け出しエンジニアの伊藤です。東京ITカレッジのJava研修で学んだ内容を復習も兼ねて記事にしたいと思います。今回は、日付時刻のまとめとして、日付時刻に関する基本的なクラスやメソッド等の概要を紹介していきます。より詳しく知りたい!という方は、リンク先の関連記事をご参考にしてください。Javaやプログラムについて勉強し始めた方の参考になれば幸いです!(eclipseを使用して計算を行って