文字列の最後の文字を削除するにはどうすればいいですか?

文字列の最後の文字を削除するには?

1. 概要

この簡単な記事では、String.の最後の文字を削除するためのさまざまな手法を確認して説明します。

2. String.substring()の使用

最も簡単な方法は、Stringクラスのthe built-in substring() methodを使用することです。

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

ただし、this method is not null-safeであり、空の文字列を使用すると、これは失敗します。

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()の使用

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

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


    org.apache.commons
    commons-lang3
    3.0

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 class provides the chop() method that works well with all edge scenarios: empty and null Strings

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

StringUtils.chop(TEST_STRING);

5. 正規表現を使用する

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

たとえば、replaceAll() method of String class itselfを使用できます。これは正規表現と置換Stringの2つのパラメーターを取ります。

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

Stringでメソッドを呼び出しているため、操作はもちろんnot null-safeであることに注意してください。

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

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

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

最後に、the implementation with Java 8を書き直してみましょう。

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

6. 結論

この短い記事では、Stringの最後の文字のみを削除するさまざまな方法について説明しました。一部は手動で、一部はすぐに使用できます。

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

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