【Java】StringUtilsのメソッドが便利だった件
概要
こんにちは!
本日はコードレビューで教わったJavaのtipsを書いてみます。
Javaを数年書いてるのに知らなかったので、
その念も込めた記事です笑
StringUtilsについて
StringUtilsはString型の文字列操作で様々な操作ができるメソッドです!
レビューで教わった際もそうだったのですが、例えば
nullチェックが不要になる考慮があったりします。
公式サイト↓
ChatGPTにも聞いてみた
文字列操作ってのは上記と同様で、「Apache Commons Lang」
というライブラリにて提供されているようですね。
isEmpty / isNotEmpty
結論から言うと、String型のnullチェックと空チェックを
してくれます!
public static boolean isEmpty(final CharSequence cs) {
// null Check & empty Check!
return cs == null || cs.length() == 0;
}
Stringクラスの場合は空チェックのみ実施なので、
nullチェックも兼ねてくれるため便利ですね!
public boolean isEmpty() {
// empty Check Only!
return value.length == 0;
}
NullPointerExceptionを防げる方法にもなりそうです!
使用例
import org.apache.commons.lang3.StringUtils;
public class StringUtilsExample {
public static void main(String[] args) {
String str1 = "";
String str2 = null;
String str3 = "Hello, World!";
// str1は空文字列なのでtrueを返す
System.out.println("Is str1 empty? " + StringUtils.isEmpty(str1)); // true
// str2はnullなのでtrueを返す
System.out.println("Is str2 empty? " + StringUtils.isEmpty(str2)); // true
// str3は文字が含まれているのでfalseを返す
System.out.println("Is str3 empty? " + StringUtils.isEmpty(str3)); // false
}
}
isBlank / isNotBlank
こちらは文字列が
- null
- 空
- または空白(スペース、タブ、改行など)
で構成されているかを判定するメソッドです!
使用例
isEmptyとの違いは、空白であるかを確認するところですね。
ややこしいですが、空白(スペース等)が含まれれば空文字ではないので!
import org.apache.commons.lang3.StringUtils;
public class Example {
public static void main(String[] args) {
String str = " ";
String str2 = "ab c";
// isEmpty: 空文字列かどうか
System.out.println(StringUtils.isEmpty(str)); // false
// isBlank: 空白または空文字列かどうか
System.out.println(StringUtils.isBlank(str)); // true
// isBlank: 全て空文字でないと空白判定にはならない
System.out.println(StringUtils.isBlank(str2)); // false
}
}
reverse
こちらはシンプルで、文字列を逆順にします。
import org.apache.commons.lang3.StringUtils;
public class ReverseExample {
public static void main(String[] args) {
String str = "abcdefg";
// 文字列を逆転
String reversedStr = StringUtils.reverse(str);
System.out.println(reversedStr); // "gfedcba"
}
}
contains
containsは、文字列の中に特定の部分文字列が
含まれているかをチェックします!
import org.apache.commons.lang3.StringUtils;
public class ContainsExample {
public static void main(String[] args) {
String str = "Hello, World!";
// "World" が含まれているか確認
System.out.println(StringUtils.contains(str, "World")); // true
// "Java" が含まれているか確認
System.out.println(StringUtils.contains(str, "Java")); // false
}
}
upperCase / lowerCase
- upperCase
- 文字列を全て大文字に変換します
- lowerCase
- 文字列を全て小文字に変換します
使用例
import org.apache.commons.lang3.StringUtils;
public class UpperAndLowerCaseExample {
public static void main(String[] args) {
String str = "Hello, World!";
// すべて大文字に変換
String upperStr = StringUtils.upperCase(str);
System.out.println(upperStr); // "HELLO, WORLD!"
// すべて小文字に変換
String lowerStr = StringUtils.lowerCase(str);
System.out.println(lowerStr); // "hello, world!"
}
}
trim
文字列の前後の空白を削除します。
使用例
import org.apache.commons.lang3.StringUtils;
public class TrimExample {
public static void main(String[] args) {
String str = " Hello, World! ";
// 前後の空白を削除
String trimmedStr = StringUtils.trim(str);
System.out.println("Before: '" + str + "'");
System.out.println("After: '" + trimmedStr + "'"); // "Hello, World!"
}
}
leftPad / rightPad
文字列の左または右側を、指定の文字数になるよう空白で埋めてくれます。
使用例
import org.apache.commons.lang3.StringUtils;
public class PadExample {
public static void main(String[] args) {
String str = "A";
// 指定した文字数になり、空白で調整する
System.out.println(StringUtils.leftPad(str, 5)); // 5文字で指定
System.out.println(StringUtils.leftPad(str, 5, "1")); // "1"で埋めて5文字にする
System.out.println(StringUtils.rightPad(str, 3));
System.out.println(StringUtils.rightPad(str, 5, "3"));
}
}
// 分かりにくいですが、2行目と4行目は空白で5文字になってます
A
1111A
A
A3333
isNumeric / isNumericSpace
最後はこれ。
このメソッドは少々ややこしく、微妙な違いがあります。
-
isNumeric
- 数字かどうかチェックし、true/falseを返却
- 空文字・nullの場合はfalse
- スペースや小数点、符号等もfalseを返却
-
isNumericSpace
- 数字かどうか確認するのは共通
- こちらは空白を許容する
- それ以外は isNumeric と同じ
使用例
isNumericSampleは数字のみの構成しかtrueにならない。
import org.apache.commons.lang3.StringUtils;
public class IsNumericExample {
public static void main(String[] args) {
System.out.println(StringUtils.isNumeric("12345")); // true
System.out.println(StringUtils.isNumeric("12 345")); // false (スペースを含むため)
System.out.println(StringUtils.isNumeric("123.45")); // false (小数点を含むため)
System.out.println(StringUtils.isNumeric("abc123")); // false (アルファベットを含むため)
System.out.println(StringUtils.isNumeric("")); // false (空文字)
}
}
次に isNumericSpace の例。
isNumericSpaceは空白を許容し、例えば「12 345」でもtrueになる
import org.apache.commons.lang3.StringUtils;
public class IsNumericSpaceExample {
public static void main(String[] args) {
System.out.println(StringUtils.isNumericSpace("12345")); // true
System.out.println(StringUtils.isNumericSpace("12 345")); // true (スペースを許容)
System.out.println(StringUtils.isNumericSpace("123.45")); // false (小数点を含むため)
System.out.println(StringUtils.isNumericSpace("abc123")); // false (アルファベットを含むため)
System.out.println(StringUtils.isNumericSpace("")); // false (空文字)
}
}
最後に
Java歴長い人は、当たり前に知ってるような内容かもしれません。
しかし現場のソースを見るとStringUtilsではなく、
Stringの方を使用している場合もあります。
例えばisEmptyなら、ぬるぽを防ぐために採用してみるなど
意外と活躍できる場面は近くにあるかもしれません・・・!
基本に戻って、そんなきっかけ等に役立てれば幸いです!
参考文献
- Stringのnull、空文字チェックにはStringUtilsのメソッドを使おう!
- StringUtils
Discussion