仕様が曖昧なので色々と決め打ちです。
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}
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。