1概要

この簡単な記事では、

String.

の最後の文字を削除するためのさまざまな手法を調べて説明します。


2

String.substring()


を使用する

最も簡単な方法は、

String

クラスの

組み込み

substring()

メソッド

を使用することです。

与えられた

Stringの最後の文字を削除するには、

を開始インデックスとして、最後から2番目の文字のインデックスの2つのパラメータを使う必要があります。これを達成するには、

String

s

length()

メソッドを呼び出し、結果から

1

を引きます。

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

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

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

コードをリファクタリングしてJava 8を使用することができます。

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

クラスを使用できます。

そのうちの1つが例外を処理する

null-safe

substring()

method

です。


StringUtils

を含めるには、

pom.xml

ファイルを更新する必要があります。

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


StringUtils.substring()

には3つのパラメータが必要です。与えられた

String、

最初の文字のインデックス(この場合は常に0)、そして最後から2番目の文字のインデックス。繰り返しますが、

length()

メソッドを使用して__1を減算するだけです。

String TEST__STRING = "abcdef";

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

それでも、この操作は再び安全ではありません。空の

Strings

でも問題なく動作します。


4

StringUtils.chop()


を使用する


  • StringUtils

    クラスは

    chop()

    メソッドを提供しています。

それは非常に使いやすく、ただ一つのパラメータを必要とします:

String.

その唯一の目的は最後の文字を取り除くことです。それ以上、それ以下というものはありません。

StringUtils.chop(TEST__STRING);


5正規表現を使う

正規表現をうまく利用して、

String

から最後の文字(または任意の数の文字)を削除することもできます。

たとえば、

String

クラス自体の


replaceAll()

メソッドを使用することができます。

– 正規表現と置換

String

の2つのパラメータを取ります。

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


String

でメソッドを呼び出しているので、その操作はもちろんnullセーフではありません。

また、

replaceAll()

と正規表現は一見複雑になることがあります。

正規表現のリンクについてもっと読むことができます:/regular-expressions-java[論理]をもう少しユーザーフレンドリーにするために、我々はヘルパークラスでそれを包むことができます:

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


String

が改行で終わっている場合、上記のメソッドはregexの

“。”

が行末文字以外の任意の文字にマッチするので失敗します。

最後に、Java 8 ** による実装を書き換えましょう。

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


6. 結論

この短い記事では、

String

の最後の文字だけを削除するさまざまな方法について説明しました。

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

いつものように、この記事で使われているコードはhttps://github.com/eugenp/tutorials/tree/master/java-strings[over on GitHub]にあります。