今回の Tips では、文字列中にある空白文字をすべて除去するメソッドを作ります。
文字列の空白を削除するメソッドについては、trim を紹介しましたが、trim では文字列の前後にある空白だけが除去され、途中にある空白文字はそのまま残ります。
今回のメソッドでは、途中にある空白も取り去ります。
public static String squeeze( String s ) 機能 : 文字列sから空白を除去し、戻り値として返す。 空白の含まれない文字列はそのまま返す。 全角空白は除去しない。
class Squeeze {
public static String squeeze( String s ) {
StringBuffer buf = new StringBuffer( s.length() );
//空白以外の文字を取り出す
for( int i = 0; i < s.length(); i++ ) {
if( s.charAt(i) == ' '
|| s.charAt(i) == '\n'
|| s.charAt(i) == '\t' ) continue;
buf.append( s.charAt(i) );
}
return buf.toString();
}
// ------------------------------------------------------------
public static void main( String[] args ) {
String s[] = { " 先頭と中間と 末尾に半角スペース "
, " 先頭と中間と 末尾に全角スペース "
, "\t先頭と中間と\t末尾にタブ\t"
, "\n先頭と中間と\n末尾に改行\n"
, "空白の無い文字列"
, " " //半角空白,タブ,改行のみ
, " " //全角空白のみ
, "" //空の文字列
};
for( int i = 0; i < s.length; i++ ) {
String t = squeeze( s[i] );
System.out.println( i+":##"+ t +"##");
}
}
}
空白が除去されたか分かるように、## ではさんでプリントします。
(実行結果)
0:##先頭と中間と末尾に半角スペース## 1:## 先頭と中間と 末尾に全角スペース ## 2:##先頭と中間と末尾にタブ## 3:##先頭と中間と末尾に改行## 4:##空白の無い文字列## 5:#### 6:## ## 7:#### |
・・・ すべての半角スペースが除去された ・・・ 全角スペースは残っている ・・・ すべてのタブが除去された ・・・ すべての改行が除去された ・・・ これはそのまま ・・・ 半角空白のみだったのが、空文字列となった ・・・ 全角空白はそのまま ・・・ 元々空の文字列で、そのまま |
if( Character.isWhitespace(s.charAt(i)) ) continue;
(今回のクイズは自習です)
squeezeメソッドを、上記とは別のやり方で実現するには、どんな方法があるか考えてみましょう。たとえば、trim と他のメソッドを組み合わせたり、パターンマッチのクラスを利用するなど。
[ 関連記事 ] trim を使う
while( (s = br.readLine()) != null ) {
String array[] = s.split( "," ); //カンマで分割
if( prevcode.equals( array[0] ) ) continue;
bw.write( array[0] + "\n" )l
prevcode = array[0];
}
array[0] に入れた店舗コードと prevcode を比較し、同じなら continue して読み飛ばします。異なるときは出力し、prevcode をその店舗コードで更新します。