[AD] Scalaアプリケーションの開発・保守は合同会社ミルクソフトにお任せください
この記事では、Scalaで文字列から前後の全角空白を除去する方法を解説します。
strip
メソッドを使用して文字列の前後の全角空白を除去する
Java 11から、String
にstrip
メソッドが追加されました。
Javapublic String strip()
strip
メソッドを使用すると、全角空白を含む「空白」を除去することができます。
サンプルとしてこちらの文字列に対して空白文字の除去処理を行ってみましょう。
val title = " Scala逆引き解説 Scalapedia "
strip
メソッドを使用した例は以下のようになります。
println("【" + title.strip + "】")
結果は以下のようになります。
【Scala逆引き解説 Scalapedia】
文字列の前後の空白がきれいに除去されていることがわかります。
java.lang.String#strip()
文字列の「前だけ」「後ろだけ」空白を除去する
実は、Java 11で追加されたのはstrip
メソッドだけではありません。
stripLeading
あるいは stripTrailing
というメソッドも追加されています。
それぞれ使い方を見てみましょう。
stripLeading
メソッドを使用して文字列の前側の全角空白を除去する
stripLeading
メソッドを使用すると、文字列の前側の全角空白を除去することができます。
Javapublic String stripLeading()
サンプルの文字列から前側だけ空白を除去してみましょう。
println("【" + title.stripLeading + "】")
結果は以下のようになります。
【Scala逆引き解説 Scalapedia 】
前側の空白が除去される一方で、後ろ側の空白はそのまま残されていることがわかります。
java.lang.String#stripLeading()
stripTrailing
メソッドを使用して文字列の後ろ側の全角空白を除去する
stripTrailing
メソッドを使用すると、文字列の後ろ側の全角空白を除去することができます。
Javapublic String stripTrailing()
今度はサンプルの文字列から後ろ側だけ空白を除去してみましょう。
println("【" + title.stripTrailing + "】")
結果は以下のようになります。
【 Scala逆引き解説 Scalapedia】
前側の空白がそのまま残されている一方で、後ろ側の空白が除去されていることがわかります。
java.lang.String#stripTrailing()
半角空白のみ除去したい場合はtrim
メソッドを使う
trim
メソッドは文字列の前後の半角空白を除去するメソッドです。
先ほどの文字列にtrim
メソッドを使用してみましょう。
val title = " Scala逆引き解説 Scalapedia "
println("【" + title.trim + "】")
結果は以下のようになります。
【 Scala逆引き解説 Scalapedia 】
空白が残ってしまっていますね。
実は、文字列の前後の空白には半角空白だけでなく全角空白が混ざっていたため、このような結果となりました。
除去するのは半角空白のみでよく、全角空白を除去する必要がない場合には、java.lang.String#trim()
メソッドを使用することができます。
前後の空白が実際にどのような文字なのかによって、メソッドを使い分ける必要があることに注意してください。
trim
メソッドについては、以下の記事でさらに詳しく解説しています。
java.lang.String#trim()
Javaにおける「空白」"white space"とは、特定の空白文字の総称
さてこれらのメソッドは「空白」を除去してくれます。
鈎括弧が意味深ですね。
実は、Javaの「空白」"white space"には明確な意味があります。
Javaの「空白」"white space"とは、「Character#isWhitespace
を実行するとtrue
を返す文字」を指します。
Character#isWhitespace
を実行するとtrue
を返すのは、具体的には以下の文字です。
日本語名 | カテゴリ | 名称 | Unicode expression |
---|---|---|---|
スペース(半角空白) | Space (Zs) | SPACE | U+0020 |
Space (Zs) | OGHAM SPACE MARK | U+1680 | |
Space (Zs) | EN QUAD | U+2000 | |
Space (Zs) | EM QUAD | U+2001 | |
Space (Zs) | EN SPACE | U+2002 | |
Space (Zs) | EM SPACE | U+2003 | |
Space (Zs) | THREE-PER-EM SPACE | U+2004 | |
Space (Zs) | FOUR-PER-EM SPACE | U+2005 | |
Space (Zs) | SIX-PER-EM SPACE | U+2006 | |
Space (Zs) | PUNCTUATION SPACE | U+2008 | |
Space (Zs) | THIN SPACE | U+2009 | |
Space (Zs) | HAIR SPACE | U+200A | |
Space (Zs) | MEDIUM MATHEMATICAL SPACE | U+205F | |
全角空白 | Space (Zs) | IDEOGRAPHIC SPACE | U+3000 |
Line (Zl) | LINE_SEPARATOR | U+2028 | |
Paragraph (Zp) | PARAGRAPH_SEPARATOR | U+2029 |
さらに以下の文字も「空白」に含まれます。
日本語名 | 名称 | inJava | Unicode expression |
---|---|---|---|
水平タブ | HORIZONTAL TABULATION | \t | U+0009 |
改行 | LINE FEED | \n | U+000A |
垂直タブ | VERTICAL TABULATION | U+000B | |
フォーム・フィード | FORM FEED | \f | U+000C |
復帰 | CARRIAGE RETURN | \r | U+000D |
ファイル区切り文字 | FILE SEPARATOR | U+001C | |
グループ区切り文字 | GROUP SEPARATOR | U+001D | |
レコード区切り文字 | RECORD SEPARATOR | U+001E | |
単位区切り文字 | UNIT SEPARATOR | U+001F |
以下の文字は空白に含まれません。
以上です。
この一覧の中に全角空白が含まれているので、全角空白を除去するためにstrip
メソッドを使うことができるというわけです。
このことについて、詳しくは以下を参照してください。
java.lang.Character#isWhitespace()