プロが教えるわが家の防犯対策術!

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

String[] word = str.split(" ",0);  //半角空白
のように書くと、全角スペースは区切りとしてみなされず、

String[] word = str.split(" ",0);  //全角空白
のように書くと、半角スペースは区切りとしてみなしてくれません。

全角スペースでも半角スペースでも、スペース位置で文字列を区切りたいのですが、どのように書けばよいのでしょうか?

A 回答 (4件)

単純に置換してしまえばよいのでは?



// 全角スペースはすべて半角スペースに置換
// 半角スペースで区切る
String[] word = str.replaceAll(" ", " ").split(" ",0);
    • good
    • 1
この回答へのお礼

回答ありがとうございます。

教えていただいた書き方で、
無事に解決することができました。

大変勉強になりました。
ありがとうございました。

お礼日時:2009/01/08 01:17

正規表現を用いる場合は、「いずれかの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さんのおっしゃるようにどちらか一方にまとめるのが一番スマートだとは思いますけども。(ということで、上記のコードも決して真似をせず、あくまで参考程度ということで。)
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
無事解決することができました。

choconamacreamさんの回答も
今後の参考にさせていただきます。

ありがとうございました。

お礼日時:2009/01/08 01:14

>全角スペースでも半角スペースでも、スペース位置で文字列を区切りたい



split の第一引数は正規表現なんだから、「全角または半角スペース」を指定すればいいだけではないですか?
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
無事解決することができました。

koko_u_さんのご意見も
今後の参考にさせていただきます。

ありがとうございました。

お礼日時:2009/01/08 01:15

少し面倒ですが、こうしたらどうでしょう?



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]);
}
}
}
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
無事に解決することができました。

zozyさんのご回答も
今後の参考にさせていただきます。

ありがとうございました。

お礼日時:2009/01/08 01:18

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!