Javaで文字列の末尾から余分な区切り文字を削除します
この記事では、Java で文字列の末尾から余分な区切り文字を削除する方法について説明します。
コレクションがループされ、各項目が区切り記号付きの文字列に追加されると、文字列の最後に余分な区切り記号が追加されます。次のコードは、この問題の例を示しています。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
import java.util.Arrays; import java.util.List; class Main { public static void main(String[] args) { List<String> colors = Arrays.asList("BLACK", "GREY", "WHITE"); String separator = ","; StringBuilder str = new StringBuilder(); for (String color: colors) { str.append(color).append(separator); } System.out.println(str); // 黒、グレー、白、 } } |
コードの出力は次のとおりです "BLACK,GREY,WHITE,"
、最後に不要なカンマが付いています。これは、以下で説明するように、さまざまな方法で修正できます。
1.使用する String
class
Java で文字列の末尾から余分な区切り文字を削除する 1 つの方法は、 String
クラス。たとえば、次のような方法が使用できます。
1.使用する substring()
方法
最も簡単な解決策は、 substring()
元の文字列の部分文字列である新しい文字列を返すメソッド。このアイデアは、先頭から部分文字列を取得し、最後の文字を除く文字列内のすべての文字を考慮することです。例えば:
1 2 3 4 5 6 7 |
public static String removeExtraSeparator(String str) { if (str == null || str.isEmpty()) { return str; } return str.substring(0, str.length() - 1); } |
この方法は、削除するセパレータの正確な長さがわかっている場合に機能します。ただし、末尾に複数のセパレータがある場合、またはセパレータの長さがわからない場合は、機能しない可能性があります。
2.使用する replaceFirst()
また replaceAll()
方法
もう 1 つのオプションは、文字列の末尾の区切り文字と一致する正規表現を定義することです。使用できます replaceFirst()
また replaceAll()
正規表現の最初の出現またはすべての出現を別の文字列に置き換えるメソッド。たとえば、次のソリューションでは正規表現を使用します。 [,;/.]+$
、文字列の末尾にある 1 つ以上の区切り文字と一致します。ここ、 $
文字列の最後の文字の直後の位置に一致します。
1 2 3 4 5 6 7 |
public static String removeExtraSeparator(String str) { if (str == null || str.isEmpty()) { return str; } return str.replaceFirst("[,;/.]+$", ""); // または replaceAll() を使用します } |
これは、複数のセパレータを削除する場合、または複数のセパレータがある場合に非常に便利です。ただし、文字列の末尾に不明な区切り文字がある場合は機能しない可能性があります。
2. ApacheCommonsLangの使用
The StringUtils
Apache Commons Lang ライブラリのクラスには、Java の文字列の末尾から余分な区切り文字を削除するためのメソッドがいくつか用意されています。たとえば、次のような方法が使用できます。
1.使用する StringUtils.chop()
方法
The StringUtils.chop()
このメソッドは、元の文字列のコピーから末尾から 1 文字を削除した新しい文字列を返します。これは、これまでのところ最も読みやすいソリューションです。 null または空の文字列も処理します。
1 2 3 |
public static String removeExtraSeparator(String str) { return StringUtils.chop(str); } |
このメソッドは、文字列の末尾からセパレータを 1 つだけ削除する場合に便利です。複数のセパレータがある場合は、文字列がセパレータで終わらなくなるまで繰り返し呼び出すことができます。
2.使用する StringUtils.removeEnd()
方法
The removeEnd()
このメソッドは、指定された部分文字列が元の文字列の末尾にある場合、それを削除します。これを使用して、区切り文字をサフィックスとして渡すことで、文字列の末尾から余分な区切り文字を削除できます。例えば:
1 2 3 |
public static String removeExtraSeparator(String str, String sep) { return StringUtils.removeEnd(str, sep); } |
この方法は、削除する区切り文字がわかっている場合に機能します。最後に複数の区切り文字がある場合、または区切り文字の値がわからない場合は機能しません。
3.使用する StringUtils.substring()
方法
The substring()
このメソッドでは、文字列の末尾からオフセットされた負のインデックスが許可されます。次のように使用できます。ここ -1
文字列の末尾から逆にカウントすることを意味します 1
キャラクター。
1 2 3 |
public static String removeExtraSeparator(String str) { return StringUtils.substring(str, 0, -1); } |
この方法は、削除するセパレータが 1 つある場合に機能します。最後に複数の区切り文字がある場合は機能しません。
4.使用する StringUtils.stripEnd()
方法
The stripEnd()
メソッドは、指定された文字を文字列の末尾から削除します。このメソッドを使用すると、区切り文字を文字の 1 つとして渡すことで、文字列の末尾から余分な区切り文字を削除できます。例えば:
1 2 3 |
public static String removeExtraSeparator(String str) { return StringUtils.stripEnd(str, ",;/."); } |
この方法は、文字列の末尾で区切り文字として使用できるすべての文字を指定できる場合に機能します。ただし、他に保持したい文字がある場合、または区切り文字を 1 つだけ削除したい場合は、機能しない可能性があります。
3.使用する StringBuilder
class
別のオプションは、文字列を StringBuilder インスタンス、およびその使用 deleteCharAt()
最後のインデックスにある文字を削除するメソッド。最後に、変換します StringBuilder
文字列に戻ります。以下に例を示します。
1 2 3 4 5 |
public static String removeExtraSeparator(String str) { return new StringBuilder(str) .deleteCharAt(str.length() - 1) .toString(); } |
Java で文字列の末尾から余分な区切り文字を削除する方法は以上です。
関連記事: