1. 概要

このクイックチュートリアルでは、文字列の最後の文字を削除するためのさまざまな手法について説明します。

2. String.substring()を使用する

最も簡単な方法は、 String クラスの組み込みのsubstring()メソッドを使用することです。

特定のString、の最後の文字を削除するには、開始インデックスとして 0 を使用し、最後から2番目の文字のインデックスを使用する必要があります。 これは、 Stringlength()メソッドを呼び出し、結果から1を引くことで実現できます。

ただし、このメソッドはnullセーフではなく、、空の文字列を使用すると、これは失敗します。

nullと空の文字列の問題を克服するために、メソッドをヘルパークラスでラップできます。

public static String removeLastChar(String s) {
    return (s == null || s.length() == 0)
      ? null 
      : (s.substring(0, s.length() - 1));
}

コードをリファクタリングして、Java8を使用できます。

public static String removeLastCharOptional(String s) {
    return Optional.ofNullable(s)
      .filter(str -> str.length() != 0)
      .map(str -> str.substring(0, str.length() - 1))
      .orElse(s);
    }

3. StringUtils.substring()を使用する

車輪の再発明の代わりに、Apache Commons Lang3ライブラリのStringUtilsクラスを使用できます。これは、便利なString操作を提供します。 それらの1つは、例外を処理する null-safe substring()メソッドです。

StringUtils、を含めるには、pom.xmlファイルを更新する必要があります。

<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-lang3</artifactId>
    <version>3.12.0</version>
</dependency>

StringUtils.substring()には、3つのパラメーターが必要です。特定の String、最初の文字のインデックス(この場合は常に0)、および最後から2番目の文字のインデックスです。 ここでも、 length()メソッドを使用して、 1:を減算するだけです。

String TEST_STRING = "abcdef";

StringUtils.substring(TEST_STRING, 0, TEST_STRING.length() - 1);

繰り返しになりますが、この操作はnullセーフではありません。 ただし、空のStringsでも問題なく動作します。

4. StringUtils.chop()の使用

StringUtilsクラスはchop()メソッドを提供します。これは、すべてのエッジシナリオ(空の文字列とnull文字列)で適切に機能します。

使い方はとても簡単で、必要なパラメータは String。だけです。その唯一の目的は、最後の文字を削除することです。それ以上でもそれ以下でもありません。

StringUtils.chop(TEST_STRING);

5. 正規表現の使用

正規表現をうまく利用して、 String から最後の文字(または任意の数の文字)を削除することもできます。

たとえば、Stringクラス自体の replaceAll()メソッドを使用できます。このメソッドは、正規表現と置換Stringの2つのパラメーターを取ります。

TEST_STRING.replaceAll(".$", "");

Stringでメソッドを呼び出しているため、操作はnullセーフではないことに注意してください

また、 replaceAll()および正規表現は一見複雑になる可能性があります。 正規表現ここについて詳しく読むことができますが、ロジックをもう少しユーザーフレンドリーにするために、ヘルパークラスでラップすることができます。

public static String removeLastCharRegex(String s) {
    return (s == null) ? null : s.replaceAll(".$", "");
}

String が改行で終わる場合、上記のメソッドは、行末記号を除くすべての文字の正規表現一致で“。”として失敗することに注意してください。

最後に、実装をJava8で書き直してみましょう。

public static String removeLastCharRegexOptional(String s) {
    return Optional.ofNullable(s)
      .map(str -> str.replaceAll(".$", ""))
      .orElse(s);
}

6. 結論

この簡単な記事では、文字列の最後の文字のみを削除するさまざまな方法、いくつかのマニュアル、およびいくつかの箱から出してすぐに使える方法について説明しました。

より柔軟性が必要で、より多くの文字を削除する必要がある場合は、正規表現を使用したより高度なソリューションを使用できます。

いつものように、記事全体で使用されているコードは、GitHubにあります。