trim()
関数は、末尾のスペースと先頭のスペースの両方を削除しますが、文字列の末尾のスペースのみを削除したい場合、どうすればよいですか?
JDK 11以降を使用している場合は、おそらく stripTrailing() を使用する必要があります。
正規表現\s++$
を使用すると、末尾のスペース文字(スペースおよびタブ文字を含む)をすべて空の文字列(""
)に置き換えることができます。
final String text = " foo ";
System.out.println(text.replaceFirst("\\s++$", ""));
出力
foo
正規表現の内訳は次のとおりです。
\s
–任意の空白文字、++
– 1つ以上の前のトークンと(場合によっては)一致します。つまり、1つ以上の空白文字に一致します。 +
パターンは、 所有形式++
で使用されます。これにより、パターンが一致しない場合を検出する時間が短縮されます。$
–文字列の終わり。したがって、正規表現は、文字列の末尾が直接続く、できるだけ多くの空白、つまり末尾の空白に一致します。
後で要件を拡張する必要がある場合、正規表現の学習への投資はより価値があります。
参考文献
別のオプションは、Apache Commons StringUtils
、特に StringUtils.stripEnd を使用することです
String stripped = StringUtils.stripEnd(" my lousy string "," ");
元のJava.lang.String.trim()
メソッドを少し変更し、動作するはずです:
public String trim(String str) {
int len = str.length();
int st = 0;
char[] val = str.toCharArray();
while ((st < len) && (val[len - 1] <= ' ')) {
len--;
}
return str.substring(st, len);
}
テスト:
Test test = new Test();
String sample = " Hello World "; // A String with trailing and leading spaces
System.out.println(test.trim(sample) + " // No trailing spaces left");
出力:
Hello World // No trailing spaces left
最も実用的な答えは@Michaです。 アーマドはあなたが望んでいたものの逆です 慣れないツールを使用したくない場合や、具体的なアプローチを検討したい場合に備えて、私が思いついたのは次のとおりです。
public String trimEnd( String myString ) {
for ( int i = myString.length() - 1; i >= 0; --i ) {
if ( myString.charAt(i) == ' ' ) {
continue;
} else {
myString = myString.substring( 0, ( i + 1 ) );
break;
}
}
return myString;
}
次のように使用します:
public static void main( String[] args ) {
String s = " Some text here ";
System.out.println( s + "|" );
s = trimEnd( s );
System.out.println( s + "|" );
}
出力:
Some text here | Some text here|
私の意見では最善の方法:
public static String trimEnd(String source) {
int pos = source.length() - 1;
while ((pos >= 0) && Character.isWhitespace(source.charAt(pos))) {
pos--;
}
pos++;
return (pos < source.length()) ? source.substring(0, pos) : source;
}
これは、ジョブを実行するための一時オブジェクトを割り当てず、正規表現を使用するよりも高速です。また、 ''だけでなく、すべての空白が削除されます。
これは非常に短く、効率的で読みやすいバージョンです。
_public static String trimTrailing(String str) {
if (str != null) {
for (int i = str.length() - 1; i >= 0; --i) {
if (str.charAt(i) != ' ') {
return str.substring(0, i + 1);
}
}
}
return str;
}
_
str.charAt(i) != ' '
の代替として、空白のより広い定義を使用する場合は、!Character.isWhitespace(str.charAt(i)
を使用することもできます。
JDK11
を使用できます stripTrailing :
String result = str.stripTrailing();
このコードは、わかりやすい名前を使用して(および正規表現を避けて)できる限り簡単に読み取ることを目的としています。
Java 8のOptional
を使用するため、すべての人に適しているわけではありません。
public static String removeTrailingWhitspace(String string) {
while (hasWhitespaceLastCharacter(string)) {
string = removeLastCharacter(string);
}
return string;
}
private static boolean hasWhitespaceLastCharacter(String string) {
return getLastCharacter(string)
.map(Character::isWhitespace)
.orElse(false);
}
private static Optional<Character> getLastCharacter(String string) {
if (string.isEmpty()) {
return Optional.empty();
}
return Optional.of(string.charAt(string.length() - 1));
}
private static String removeLastCharacter(String string) {
if (string.isEmpty()) {
throw new IllegalArgumentException("String must not be empty");
}
return string.substring(0, string.length() - 1);
}
文字列値= "Java"へようこそ;;
だから我々は使用することができます
値= value.trim();
Springフレームワークは便利なorg.springframework.util.StringUtilsを提供します。