• ベストアンサー

splitを使ってスペース位置で文字列を区切りたい

splitを使ってスペース位置で文字列を区切りたいのですが、 String[] word = str.split(" ",0);  //半角空白 のように書くと、全角スペースは区切りとしてみなされず、 String[] word = str.split(" ",0);  //全角空白 のように書くと、半角スペースは区切りとしてみなしてくれません。 全角スペースでも半角スペースでも、スペース位置で文字列を区切りたいのですが、どのように書けばよいのでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • dyna_1550
  • ベストアンサー率34% (122/353)
回答No.2

単純に置換してしまえばよいのでは? // 全角スペースはすべて半角スペースに置換 // 半角スペースで区切る String[] word = str.replaceAll(" ", " ").split(" ",0);

kingyo0c0
質問者

お礼

回答ありがとうございます。 教えていただいた書き方で、 無事に解決することができました。 大変勉強になりました。 ありがとうございました。

すると、全ての回答が全文表示されます。

その他の回答 (3)

回答No.4

正規表現を用いる場合は、「いずれかの1文字」に関する使い方があるので、それを使用することとなります。ただ、今回の場合は、指定する時に「"」(ダブルクォーテーション)を使用するはずなので、その直前で「エスケープ」しないといけない所がポイントです。 正規表現を用いない場合は、必然的に「データ構造とアルゴリズム」の知識を総動員していくこととなります。ちなみに、私の方では遊び半分でいろいろと打っていたら、以下のようになりました。(java version "1.5.0_17")  String str="a b c d e  f";  //まずは、半角スペースで区切る  String[] no_Hankaku=str.split(" ",0);  ArrayList<String> list = new ArrayList<String>();  Label:for(int i=0;i<no_Hankaku.length;i++){   // 全角スペース有無のチェック   for(int j=0;j<no_Hankaku[i].length();j++){    Character chr = no_Hankaku[i].charAt(j);    if(chr.toString().equals(" ")){     //そして、今度は全角スペースで区切る     String[] no_Zenkaku=no_Hankaku[i].split(" ",0);     for(int k=0;k<no_Zenkaku.length;k++){      list.add(no_Zenkaku[k]);     }     continue Label;    }   }   list.add(no_Hankaku[i]);  }  System.out.println("独自アルゴリズム");  for(String s : list){   System.out.println("「" + s + "」");  } とまあ、ここまで書いといて何ですが、本来「全角スペース」と「半角スペース」に分けて処理を行うっていうのはまず無いはずですし、#2さんのおっしゃるようにどちらか一方にまとめるのが一番スマートだとは思いますけども。(ということで、上記のコードも決して真似をせず、あくまで参考程度ということで。)

kingyo0c0
質問者

お礼

回答ありがとうございます。 無事解決することができました。 choconamacreamさんの回答も 今後の参考にさせていただきます。 ありがとうございました。

すると、全ての回答が全文表示されます。
  • koko_u_
  • ベストアンサー率18% (459/2509)
回答No.3

>全角スペースでも半角スペースでも、スペース位置で文字列を区切りたい split の第一引数は正規表現なんだから、「全角または半角スペース」を指定すればいいだけではないですか?

kingyo0c0
質問者

お礼

回答ありがとうございます。 無事解決することができました。 koko_u_さんのご意見も 今後の参考にさせていただきます。 ありがとうございました。

すると、全ての回答が全文表示されます。
  • zozy
  • ベストアンサー率60% (20/33)
回答No.1

少し面倒ですが、こうしたらどうでしょう? public class Split{ public static void main(String[] args){ //半角スペースを"半",全角スペースを"全"とする //a半b半c半2d全e全2f String str="a b c d e  f"; //まずは、半角スペースで区切る String[] word=str.split(" ",0); //ここでstrを初期化 str=""; //strをwordの配列の中身を全て連結したものにする //str=abcd全e全2f for(int i=0;i<word.length;i++){ str=str.concat(word[i]); } //そして、今度は全角スペースで区切る word=str.split(" ",0); //結果,str=abcdefになる for(int i=0;i<word.length;i++){ System.out.print(word[i]); } } }

kingyo0c0
質問者

お礼

回答ありがとうございます。 無事に解決することができました。 zozyさんのご回答も 今後の参考にさせていただきます。 ありがとうございました。

すると、全ての回答が全文表示されます。

関連するQ&A