質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Q&A

5回答

1463閲覧

文字列を各配列に分けたい

pbdev

総合スコア21

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

0グッド

0クリップ

投稿2019/02/13 02:54

以下の文字列をsample1,2の配列ように分けたいのですが、やり方が思いつきません。。。(split??)
文字列:"aaa.111,bbb.222,ccc.333"
sample1 = {"aaa","bbb","ccc"}
sample2 = {"111","222","333"}
例:
aaa . 111
↓ ↓
sample1 sample2
どなたかご回答お願いいたします。
説明不十分でしたら付け加えようと思います。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m.ts10806

2019/02/13 02:58

ご自身が試されたコードもあわせてご提示ください。このままでは丸投げです。split?となんとなく検討がついているようでしたら尚更です。 失敗するから質問するわけですし。まずは失敗してください。
kunai

2019/02/13 02:58

splitってワードが出てきてるなら、まずそれでご自身で書いて見て下さい。 それでうまくいかない場合に、何が悪いのかは教えてくれると思います。 多分、「こうすれば出来るだろう」ということはわかっているけど、効率的なやり方がわからないって感じですよね? であればなおさら、「こうやって出来るは出来たけど、もっとスマートに出来ないか」という方がいいです。 今のままでは丸投げと言われても仕方ないです。
guest

回答5

0

・文字列をコンマで分割して文字列配列を作る
・文字列をピリオドで分割して、それぞれ配列で比較
・比較結果で配列を構成
・配列分だけ繰り返す

と、こういう手順で実現できますね

投稿2019/02/13 03:12

y_waiwai

総合スコア87719

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

java

1String s = "aaa.111,bbb.222,ccc.333"; 2String[] ss = s.split("(\.|,)");

で 6つの単語に分かれます。後はこれを 2 つの配列に分配してやればよいです。
分配の方法はいろいろなものが考えられると思います。

イメージ説明

投稿2019/02/13 14:45

katoy

総合スコア22324

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

要件、つまり「何をどうしたいか」をはっきりさせましょう。
要件をはっきりさせれば、おのずと「どうすればいいか?」に近づきます。
ご質問の状況では、いくつかの推測は立てられます。例えば

  • カンマで区切って、各要素をピリオドで区切って1つ目ををsample1に、2つ目をsasmple2に格納する。
  • カンマかピリオドで区切って、英文字だけならsample1に、数字だけならsample2に格納する。
  • 3文字ずつ読んでいき、sample1,sample2に交互に格納する。カンマやピリオドは無視する。

このうち本当にどうしたいかによって書くコードは変わってきます。だからまずあなたがどうしたいのか、それをきちんとはっきりさせることからだと思います。

投稿2019/02/27 04:44

swordone

総合スコア20649

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

splitを使います。入力文字列と区切り文字のパターンを次のように用意します。

Java

1String source = "aaa.111,bbb.222,ccc.333"; 2String pattern1 = "\.[0-9]{3},?"; // 区切り文字列1 3String pattern2 = ",?[a-z]{3}\."; // 区切り文字列2

やってみるとわかりますが、pattern2を使うと分割した配列の先頭に空文字列が出ます。
仕方がないのでStreamのfilter機能で空文字列を除去します。やりかたは2とおり。

Java

1import java.util.stream.Stream; 2Stream.of(source.split(pattern2)) 3 .filter(x -> !x.isEmpty()) 4 //.peek(System.out::println) 5 .toArray(size -> new String[size]);

Java

1import java.util.regex.Pattern; 2Pattern.compile(pattern2) 3 .splitAsStream(source) 4 .filter(x -> !x.isEmpty()) 5 //.peek(System.out::println) 6 .toArray(size -> new String[size]);

Collectors.partitioningBy (2019-02-27)

Collectorsを使う解を示します。splitを使います。入力文字列と区切り文字のパターンを次のように用意します。

Java

1String source = "aaa.111,bbb.222,ccc.333"; 2String pattern = "\.|,"; // 区切り文字列

Pattern.splitAsStream、Collectors.partitioningByを使います。

Java

1import java.util.List; 2import java.util.Map; 3import java.util.regex.Pattern; 4import java.util.stream.Collectors; 5Map<Boolean, List<String>> m = 6 Pattern.compile(pattern) 7 .splitAsStream(source) 8 //.peek(System.out::println) 9 .collect( 10 Collectors.partitioningBy(x -> x.charAt(0) >= 'a') 11 ); 12System.out.println(m);

結果は、List<String>ですが、String[]への変換は容易なので省略。

Scalaは簡単にできるので、Java以外の言語ならもっと簡単になるのではないでしょうか。

Scala

1val (a,b) = "[a-z]{3}|[0-9]{3}".r.findAllIn("aaa.111,bbb.222,ccc.333").partition(x => x.charAt(0)>='a')

投稿2019/02/25 14:34

編集2019/02/27 04:04
退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

注意しなければならない点としては、String#splitが引数に正規表現をとることです。
. で分割するときは、引数に . を与えてやりましょう。

後は愚直に書いてやるだけです。
0. カンマで分割し、各要素を巡回
0. ピリオドで文字列を二つに分け、それぞれコンテナに放り込む

また、配列よりリストを用いた方が簡単なように思います。

投稿2019/02/13 03:49

LouiS0616

総合スコア35658

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問