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

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

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

Kotlinは、ジェットブレインズ社のアンドリー・ブレスラフ、ドミトリー・ジェメロフが開発した、 静的型付けのオブジェクト指向プログラミング言語です。

Q&A

解決済

2回答

563閲覧

Kotlinで文字列の抜き出しがしたいです。

takoyaki_tamago

総合スコア11

Kotlin

Kotlinは、ジェットブレインズ社のアンドリー・ブレスラフ、ドミトリー・ジェメロフが開発した、 静的型付けのオブジェクト指向プログラミング言語です。

0グッド

1クリップ

投稿2018/01/14 09:29

以下のような文字列から、文字列を抜き出したいです。

""" id:10, category:Default, todo:hoge
id:11, category:Default, todo:huga
id:12, category:Default, todo:foo
id:13, category:Default, todo:bar """

文字列を抜き出して、
[[10, "Default", hoge], [11, "Default, "huga"]]
というようなリストに抜き出したいです。
このような場合、どうやって抜き出せばいいんでしょうか?
よろしくおねがいします。

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

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

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

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

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

guest

回答2

0

ベストアンサー

仕様が曖昧なので色々と決め打ちです。

kotlin

1val str = 2""" 3id:10, category:Default, todo:hoge 4id:11, category:Default, todo:huga 5id:12, category:Default, todo:foo 6id:13, category:Default, todo:bar 7""" 8 9//とにかく分割 10val splitted = str.split(Regex("[ :,\n]")) 11println(splitted) 12//=> [, id, 10, , category, Default, , todo, hoge, id, 11, , category, Default, , todo, huga, id, 12, , category, Default, , todo, foo, id, 13, , category, Default, , todo, bar, ] 13 14//カラ要素を除去 15val filtered = splitted.filter {it.isNotEmpty()} 16println(filtered) 17//=> [id, 10, category, Default, todo, hoge, id, 11, category, Default, todo, huga, id, 12, category, Default, todo, foo, id, 13, category, Default, todo, bar] 18 19//値だけ取り出す 20val values = filtered.filterIndexed {index, _ -> index % 2 != 0} 21println(values) 22//=> [10, Default, hoge, 11, Default, huga, 12, Default, foo, 13, Default, bar] 23 24//3つずつまとめる(ここもうちょっとエレガントにしたい) 25val result = arrayListOf<ArrayList<String>>() 26for (i in 0..values.count()-1 step 3) { 27 result.add(arrayListOf(values[i], values[i+1], values[i+2])) 28} 29println(result) 30//=> [[10, Default, hoge], [11, Default, huga], [12, Default, foo], [13, Default, bar]]

まとめると、

kotlin

1val values = str.split(Regex("[ :,\n]")) 2 .filter {it.isNotEmpty()} 3 .filterIndexed {index, _ -> index % 2 != 0} 4val result = arrayListOf<ArrayList<String>>() 5for (i in 0..values.count()-1 step 3) { 6 result.add(arrayListOf(values[i], values[i+1], values[i+2])) 7}

投稿2018/01/15 02:13

fuzzball

総合スコア16731

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

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

0

substringを使用したらよいのではないでしょうか?

投稿2018/01/15 01:14

shikasama

総合スコア163

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問