• ベストアンサー

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

  • Java String文字列の加工について

    Java String文字列の加工について お世話になっております。 Javaで苦戦しているので、ご指導お願いします!! StringのbeforStrという変数に、 「あああ いいい ううう えええ おおお」 という風に、全角文字の間に半角スペースが入っているとき、 この変数を str1:あああ str2:いいい str3:ううう str4:えええ str5:おおお というように半角スペースで切って、その半角スペースをなくして 各変数に分割したいんですが、どうもうまくいきません。。 お手数ですが、どなたか教えてください!! ちなみに、javaは1.4です。 よろしくおねがいいたします。

    • ベストアンサー
    • Java
  • splitと同じ処理

    たとえば、 String[] s = new String[10]; String str = "abc:def:ghijk:lmn" s = str.split(":"); と同じようなことをsplitを使わずに簡単に行う(定石的な)方法はないでしょうか? 正規表現ではなく文字列による区切りのみの場合を考えます。

    • ベストアンサー
    • Java
  • 文字列を分割するクラスについて

    住所のメソッドでの開発についてご質問がございます。 仕様 住所の配列は全角80(半角160)に格納される。 住所地名の途中で分割しないようにする。 80桁すべてに文字は格納されているときは20桁の4等分にする。 スペースで分割をおこなうようにする。 例1  実行前  札幌市 ○区 北○○○○○ 00-0-0-00      実行後  札幌市 ○区 北○○○○○,00-0-0-00,,      例1の場合20桁ずつ分割を考えると14桁目のスペースを利用してカンマ区切りで4つに分割 例2 実行後  あああああ いいいいい ううううう ええ     実行後  あああああ いいいいい ううううう ええ,,,     例2の場合文字がちょうど20桁なのでちょうどカンマ区切りで4等分  例3  実行前   あああああ いいいい ううううううううううう えええええ 0-00-000       実行後   あああああ いいいい,ううううううううううう えええええ,0-00-000,      例3の場合20文字だと区切りだと、うの領域の途中になるため      11桁目のスペースを利用して分割      そしてそこから20桁目を区切ろうとして次の区切りたい場所が      番地の途中になるため実行後のように、えで区切り4等分にカンマ区切り と基本的に住所分割をスペースを利用して住所の途中や番地の途中で 区切らないでカンマ区切りの4等分にするアルゴリズムを考えています。 private void 住所漢字(String 住所漢字, String 住所カナ, String 住民票住所漢字,PrintWriter out) { //(1)分割する文字列を生成 String str = new String(住所漢字); //(2)文字列をsplitメソッドで分割 String[] strAry = str.split(",", 0); { str = 住所漢字; } for (int i=0; i<strAry.length; i++) { } out.print(str.substring(0,20)+","+ str.substring(20,40) +","+ str.substring(40,60)+","+ str.substring(60,80)); }      現在は単純に全角80桁の配列に対して 20桁ずつの4等分に実行されるだけのプログラムになってます。 上記の例のような住所分割のアルゴリズムを開発する際 StringTokenizer st = new StringTokenizerのクラスは開発に有効でしょうか? また有効である場合のソース実行例の等のアドバイス、もしくは ほかに文字を分割するための便利なクラスがございましたら ご教授ください。 どうぞよろしくお願いいたします。

    • ベストアンサー
    • Java
  • splitしない文字列について

    split("\t",$moji) で$mojiを分割しているのですが、タブ区切りなのに分割しない文字列があります。 企業秘密な所もあり、問題の文字列そのままを報告できないのですが、分割をキャンセルするような文字コードってあるのでしょうか? その文字コードであやしい物は 「 」:スペース 「!」、「♪」 などが含まれています。 通常であれば10個に分割される文字列がまったく分割されなく分割数は1と出ます。もちろんタブ区切りになっています。 1つの文字列だけの事なのです。原因はまったく不明。よろしくお願いします。

    • ベストアンサー
    • PHP
  • マージ型文字列のデリミタ2文字以上のSplit関数のようなものは実現できますか?

    素人で間違っているかもしれませんが、String::Splitは wchar_tのように1文字だけしか使えないので、\r\nのような2文字以上のデリミタに対応しているperlのsplit関数みたいのを探しています。 以下のソースで※ここですの部分で、2文字以上の任意のデリミタでマージ型文字列を配列にしたいです。 .NETは覚えたてですが、Vista以降でも廃れることは無いのでしょうか? 覚えて無意味はきついので・・・ /* VC++2005でperlのようなsplit関数を実現したい 区切り文字は\r\n */ using namespace System; int main( array<String^>^ args ){ String^ str = nullptr; if (1 > args->Length ){ str = "太郎\r\n花子\\純一郎"; } else { str = args[0]; } // strマージ文字列をPerlのsplit関数のようなもので、以下のようなnamesを作成したい。 // $names = split /\r\n/ $str; <=※ここです。 array<String^> ^names = { "太郎", "花子", "純一郎" }; String^ name; for each ( name in names ) { Console::WriteLine("{0}", name); } return 0; }

  • 文字列に半角・全角スペースが入っているかをチェックする関数のおかしな結

    文字列に半角・全角スペースが入っているかをチェックする関数のおかしな結果? 下記コードのように「文字列に半角・全角スペースが入っているかをチェックする関数」を作りました。 $textに入る文字列に半角・全角のスペースが入っているかをチェックします。 -------------------------------------------- my $text = "東 京"; if( isSpace($text) ) {   print "スペースあり"; } else {   print "スペースなし"; } sub isSpace{   my $str = shift || return(undef);   if( $str =~ /.*[\s ]+.*/ ){     return(1);   }else{     return(0);   } } -------------------------------------------- しかしなぜか1行目を my $text = "メ"; とするとスペースが入っているという結果になってしまいます。 なぜ「メ」が入ると半角もしくは全角のスペースとみなされてしまうのでしょうか? また、どうすれば正しくチェックできるようになりますか? よろしくお願いします。

    • ベストアンサー
    • Perl
  • 全角文字と半角文字を判別して文字列を追加

    全角文字と半角文字が混合している文字列に文字を追加するプログラムを考えています。 仕様としては全角から半角に変わる際には全角文字の後ろに1234を、 半角から全角に変わるときは半角文字の後ろに4321をつけるというものです。 例1 文字列が「あxxxお」ならば出力結果は「あ1234xxx4321お」 そこで質問なのですが 文字列から全角文字と半角文字をプログラム上で判別して 上記のように出力するにはどうしたらいいんでしょうか? ヒント等ございましたらどうぞお願いします。 とりあえず作ってみた例1の結果を無理やり出力するプログラムのコードを載せておきます。 こちらをうまく改変してくださっても結構ですのでよろしくお願いいたします。 #include <stdio.h> #include <string.h> int main(void){ unsigned char str0[256] = "あxxxお", str1[256] = "1234",str2[256]= "4321"; unsigned int zh,hz, len0 = strlen(str0),len1=strlen(str1),len2=strlen(str2); printf("挿入前:%s\n",&str0); zh=2; //全角から半角に変わる位置 hz=5; //半角から全角に変わる位置 //1234を挿入/// memmove(&str0[zh+len1], &str0[zh], len0 - zh+1); memcpy(&str0[zh], str1, len1); //4321を挿入/// memmove(&str0[hz+len1+len2], &str0[hz+len1], len0); memcpy(&str0[hz+len1], str2, len2); printf("挿入後:%s\n",&str0); return 0; }

  • 文字列から半角スペースと全角スペースを取り除く処理

    DBから取得した文字列に半角スペースか全角スペースが 含まれている場合取り除きたい、と考えています。 以下の様なロジックを考えているのですが、 こんな感じで良いのでしょうか。 普通は、どの様にするのでしょうか? アドバイスなどありましたら、お願い致します。m(__)m private String test(String str) {  StringBuffer sb = new StringBuffer();  char[] chr = str.toCharArray();  for(int p=0;p<chr.length;p++) {   if( chr[p] == ' ' || chr[p] == ' ' ) continue;   sb.append(chr[p]);  }  return sb.toString(); }

    • ベストアンサー
    • Java
  • PHPの空白除去

    PHP5において 半角の前後空白を削除する関数trimは理解してます。 文字列中にある半角及び全角の空白を除去するには 文字列置換用の関数、例えばstr_replaceを使って置換すれば 全て空白を除去出来ます。 例: ---------------------------------- $string=" あ い う え お "; $all=" ";//全角スペース $half=" ";//半角スペース $no="";//削除用変数 $string=str_replace($all,$no,$string); $string=str_replace($half,$no,$string); ---------------------------------- 最後の2行を書けば置換が出来るのですが、問題はこの二つの関数をまとめてクラス化し、再利用したいと思っています。 クラスの作成方法及び使用方法がまだまだ理解していないので、困ってます。どなたかお力になって頂ければ幸いにございます。

    • ベストアンサー
    • PHP
  • VBAの文字列の中に”(全角のダブルコーテーション)を使う

    VBAのStringの中に”(全角のダブルコーテーション)を使おうとしているのですが、VisualBasicEditorにより自動的に ""(半角のダブルコーテーション2つ)に変換されてしまいます。 Dim str as String str = "abc”def"    ↓ str = "abc""def" 文字列中に全角のダブルコーテーションを使う方法を教えてください。よろしくお願いします。

このQ&Aのポイント
  • アクセスジェイの振込についての質問です。通信欄として文字が記載できる部分はありますか?
  • 常陽銀行のサービス・手続きに関する質問です。アクセスジェイの振込では、通信欄として文字を記載できる部分があるのでしょうか?
  • アクセスジェイの振込について教えてください。通信欄に文字を記載することは可能ですか?
回答を見る

専門家に質問してみよう