• ベストアンサー

文字列を1文字づつ分割する方法

たとえば、 String str = "あいうえお"; とある場合、"あ"、"い"、"う"、"え"、"お"などと1文字づつ分割して、 char[] a = new char[5]; a[0] = "あ"; a[1] = "い"; a[2] = "う"; a[3] = "え"; a[4] = "お"; といったように配列に代入することは出来るのでしょうか? よろしくお願いします。

  • Java
  • 回答数4
  • ありがとう数7

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

  • ベストアンサー
  • fortranxp
  • ベストアンサー率26% (181/684)
回答No.1

これでどうでしょう。 class SampleChar { public static void main(String args[]){ String str="あいうえお"; char[] a=new char[5]; for(int i=0;i<5;i++){ a[i]=str.charAt(i); System.out.println(a[i]); } } }

kamakuragengorou
質問者

お礼

ご返答ありがとうございます。 charAtメソッドは指定されたインデックスを返すメソッドなのですね。私としては、「文字 分割」などと指定していろいろ検索してみましたがStringTokenizerしか見つけれなかったのです。 助かりました。ありがとうございました。

その他の回答 (3)

  • tachiwa
  • ベストアンサー率34% (25/73)
回答No.4

ANo3です 先程回答したメッソドは以下の通り訂正します。 class HenkanChar01 { public static void main(String args[]){ String str = "あいうえお"; char[] a = new char[5]; str.getChars(0,str.length(),a,0); for(int i = 0; i < a.length; i++){ System.out.println(a[i]); } } }

  • tachiwa
  • ベストアンサー率34% (25/73)
回答No.3

基本的なものは先の方の回答で出てしまいました。 こんなものもありますよ。 public void getChars(int srcBegin, int srcEnd, char[] dst, int dstBegin) この文字列から、コピー先の文字配列に文字をコピーします。 class HenkanChar { public static void main(String args[]){ String str = "あいうえお"; char[] a = new char[5]; for(int i=0;i<str.length();i++){ str.getChars(i,str.length(),a,i); } for(int i = 0; i < a.length; i++){ System.out.println(a[i]); } } }

kamakuragengorou
質問者

お礼

ご返答ありがとうございます。 文字を一文字づつ分割するメソッドはいろいろあるのですね。ありがとうございました。

回答No.2

そのようなメソッドは最初からありますよ。 これで、いけます。 String str = "あいうえお"; char a[] = str.toCharArray();

kamakuragengorou
質問者

お礼

はじめからあったのですね。自分でも一応調べたのですが、何を調べていたのやらという感じです... ご返答ありがとうございました。

関連するQ&A

  • 文字列を分割するクラスについて

    住所のメソッドでの開発についてご質問がございます。 仕様 住所の配列は全角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
  • 文字列の分割

    "abcdefghijk"というような文字列を  例(1):abcd、efg、h、i、jk  例(2):ab、cdefg、h、ijk  例(3):a、b、c、de、f、ghijk のように分割したいのですが、substringを使って取得するしかないでしょうか。 素人考えですみませんが、 class test{ char[] a = new char[4]; char[] b = new char[3]; char c; char d; char[] e = new char[2]; } のようなクラスを作り、 test t = new test(); t = "abcdefghijk"; などどすることで、分割する方法はないでしょうか。  #上記を試したところ、互換性のない型とエラーになりました。 分割するパターンが複数あり、文字列が長くなるとsubstringを記述する回数が増え、 終了インデックスを間違えそうで。  #間違えないようにすればいいだけの話ですが。 substring以外の方法、またはsubstringの上手な使い方がありましたら、教えていただけないでしょうか。 よろしくお願いします。

    • ベストアンサー
    • Java
  • javaの文字列分割

    文字列を分割して、またさらに分割することはできますでしょうか? 具体例をあげますと st = jave 入門,bai ダウンロード,kai ゲーム; この文字列をString[] str = st.sprit(",");で分割して、 さらにstrをString[][] strl = str.sprit(" ")で分割して表示すると str[0][0] = java str[0][1] = 入門 str[1][0] = bai str[1][1] = ダウンロード str[2][0] = kai str[2][1] = ゲーム という形にしたいのですが、どうしたらよいでしょうか?

  • ユニコード文字列の分割

    csvやファイルパスをカンマや'\'で分割する関数をユニコードでも 対応できるように改修していのですがやり方が分かりません。 関数のロジックはおおよそ以下の通りです。 (仕事先のセキュリティの関係でソースは持ち出せませんので概要ですが・・・) split(str, item, len, words[item][len], delimiter) char* str: 分割対象の文字列 int item:項目数(上限あり) int len:項目の文字数(上限あり) words[item][len]:文字列を分割、項目として格納する配列 char delimiter:区切り文字 int i=0, j=0; while(*str != NULL){ // 文字列を分割する処理 if(str != delimiter){ words[i][j++] = *str } else if{ words[i][j] = NULL i++; j=0; } ・・・・・・・・・ str++; } // 後処理があります VCの設定がマルチバイト対応だったので問題なかったのですが ユニコードに設定を切り替えるとパスの分割でカタカナの「ソ」 を含む文字列が正しく分割されないという事象が発生しました。 関数内の改修だけで解決する方法があるでしょうか? ある程度プロジェクトが動いているのであまり時間をかけないで 対応する必要があります。 OS: Windows7 SP1 環境: VC++ 2008 MFC

  • 文字列比較

    最長10文字の文字列を2件入力し、char型の配列にそれぞれ格納する。2つの文字列を比較し、文字列が同じだったら「equal」を表示し異なっていたら「Not equal」を表示するプログラムを作成せよという課題が出ました。 条件として、11文字以上の文字が入力されたら、先頭から10文字までを有効とし、11文字目以降を無視する。下記のプログラムで文字列1に11文字以上入力すると、うまく動きません。なぜ、うまくいかないかと、どうなおしたらよいかを教えてください。 #include<stdio.h> #include<string.h> #define max_length 10 void get_string (char *p_str, int size); int main() { char string1[max_length+2]; char string2[max_length+2]; printf("文字列1:"); get_string(string1,max_length+2); printf("文字列2:"); get_string(string2,max_length+2); if(!strncmp(string1,string2,max_length)) puts("equal"); else puts("Not equal"); } void get_string (char *p_str, int size) { fgets(p_str,size,stdin); }

  • avaというか文字列について少し質問です><

    avaというか文字列について少し質問です>< お願いします。 シーザー暗号で文字列をずらすためのクラスのメソッドをつくったのですが・・・ String decrypt(String str,int key) { StringBuffer sb = new StringBuffer(); // もしくはStringBuilder for(int i=0;i<str.length();i++){ char c=str.charAt(i); c=(char)((int)c-key); sb.append( c ); } こんな感じなのですがアルファベットの小文字26文字のみとしたいので暗号化や復号化の際に越えてしまう場合はアルファベット内でループさせたいのですがいまいちやり方が浮かびません><越えてしまう場合はzからひいたものを表現させれば良いかと思いやってみたのですが全然違う文字が出てきてしまいました。何かいい方法を教えてください。お願いします><

    • ベストアンサー
    • Java
  • 文字列のコピー

    C言語で、文字列をコピーする関数で、処理が止まってしまいます。 以下が実行したプログラムです。 #include<stdio.h> #include<string.h> void copy(char *str2 ,char *str3){ strcpy(str2,str3); } void input(char* str){ scanf("%s",str); } int main (void){ char *a; char *b="TEST"; printf("%s\n",b); input(a); copy(b,a); printf("%s",b); return(0);} copy(b,a);で処理が止まってしまいます。入力した文字列を表示できるように、御指摘お願いします。

  • 文字型配列に数値を文字として代入したいです

    掲題の通りですが、listという配列に数値や文字を入れたいです。 数値は必ず整数1桁、文字はAかBの1文字です。 配列は char list[] = new char[8]; として定義しています。 numにAかBを入れると、代入も表示もうまくいきます。 しかし、数値を入れると以下のような動作となります。 list[i] = num とすると 「不適合な型: 精度が失われる可能性があるintからcharへの変換」 というエラーが表示されます。 list[i] = (char)num; に変更するとエラーは出ませんが、表示がうまくされません。 list[i] = String.valueOf(num); に変更すると 「エラー: 不適合な型: Stringをcharに変換できません:   list[i] = String.valueOf(num);」 というエラーが表示されます。 何か良い方法はないでしょうか。

  • javaというか文字列について少し質問です><

    javaというか文字列について少し質問です>< javaというか文字列について少し質問です>< お願いします。 シーザー暗号で文字列をずらすためのクラスのメソッドをつくったのですが・・・ String decrypt(String str,int key) { StringBuffer sb = new StringBuffer(); // もしくはStringBuilder for(int i=0;i<str.length();i++){ char c=str.charAt(i); c=(char)((int)c-key); sb.append( c ); } こんな感じなのですがアルファベットの小文字26文字のみとしたいので暗号化や復号化の際に越えてしまう場合はアルファベット内でループさせたいのですがいまいちやり方が浮かびません><越えてしまう場合はzからひいたものを表現させれば良いかと思いやってみたのですが全然違う文字が出てきてしまいました。何かいい方法を教えてください。お願いします><

    • ベストアンサー
    • Java
  • 文字列のメンバ変数を外部変数のように扱いたい

    済みません。質問なのですが、 メンバ変数を外部変数のように扱うにはどうしたらよいのでしょうか? int型などの場合、 class test{ static const int a; }; const int test::a = 10; とすればよいですよね? これをcharの配列にして class test{ static char a[7][32]; }; char test::a[0] = "test"; とすると サイズが0の配列を割り当てまたは宣言しようとしました というコンパイルエラーがでてしまいます…。 多次元配列の場合はstatic変数としてもてないのでしょうか? char** として宣言してもどこでnewを行えばよいか解りません。 コンストラクタの中で行えば そこでstaticではなくなってしまいますし…。 後、できればstringクラスの配列で持ちたいのですが #include <string> class test{ static string test[7]; }; string test::test[0] = "aaa"; なんてことができますでしょうか? 質問内容が解りにくいかも知れませんが どうか教えてください。 宜しくお願いいたします。

専門家に質問してみよう