文字列の最後の文字を削除するにはどうすればいいですか?
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]にあります。