9
10

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【Java】StringUtilsのメソッドが便利だった件

Last updated at Posted at 2024-09-25

概要

こんにちは!
本日はコードレビューで教わったJavaのtipsを書いてみます。

Javaを数年書いてるのに知らなかったので、
その念も込めた記事です笑

StringUtilsについて

StringUtilsはString型の文字列操作で様々な操作ができるメソッドです!

レビューで教わった際もそうだったのですが、例えば
nullチェックが不要になる考慮があったりします。

公式サイト↓

ChatGPTにも聞いてみた

文字列操作ってのは上記と同様で、「Apache Commons Lang」
というライブラリにて提供されているようですね。

StringUtils は、一般的に 文字列操作 を行うための便利なメソッドを
提供するクラスやライブラリを指します。

特に、Javaの Apache Commons Lang ライブラリの一部として提供されている、
StringUtils クラスが広く知られています。

このクラスは文字列操作に関する多くのユーティリティメソッドを持ち、
文字列の空白チェックや部分文字列の検索・置換、文字列の逆転等、
様々な機能を提供します。

isEmpty / isNotEmpty

結論から言うと、String型のnullチェックと空チェックを
してくれます!

StringUtils.java
public static boolean isEmpty(final CharSequence cs) {
   // null Check & empty Check!
   return cs == null || cs.length() == 0;
}

Stringクラスの場合は空チェックのみ実施なので、
nullチェックも兼ねてくれるため便利ですね!

String.java
public boolean isEmpty() {
   // empty Check Only! 
   return value.length == 0;
}

NullPointerExceptionを防げる方法にもなりそうです!

使用例

sample.java
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との違いは、空白であるかを確認するところですね。
ややこしいですが、空白(スペース等)が含まれれば空文字ではないので!

sample.java
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

こちらはシンプルで、文字列を逆順にします。

ReverseExample.java
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は、文字列の中に特定の部分文字列が
含まれているかをチェックします!

ContainsExample.java
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
    • 文字列を全て小文字に変換します

使用例

UpperAndLowerCaseExample.java
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

文字列の前後の空白を削除します。

使用例

TrimExample.java
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

文字列の左または右側を、指定の文字数になるよう空白で埋めてくれます。

使用例

PadExample.java
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"));
    }
}
result.java
// 分かりにくいですが、2行目と4行目は空白で5文字になってます
    A
1111A
A   
A3333

isNumeric / isNumericSpace

最後はこれ。
このメソッドは少々ややこしく、微妙な違いがあります。

  • isNumeric

    • 数字かどうかチェックし、true/falseを返却
    • 空文字・nullの場合はfalse
    • スペースや小数点、符号等もfalseを返却
  • isNumericSpace

    • 数字かどうか確認するのは共通
    • こちらは空白を許容する
    • それ以外は isNumeric と同じ

使用例

isNumericSampleは数字のみの構成しかtrueにならない。

IsNumericExample.java
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になる

IsNumericSpaceExample.java
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

9
10
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
10

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?