“aabb:ccee:dfefs:efsfds:” という文字列があって、コロン(:) でsplit(“:”) すると
[aabb,ccee,dfefs,efsfds] という配列になってしまう。
区切った文字も区切った後の文字列に含めたい場合などは (?<=:) や、 (?=:) とする。
正規表現の、 (?<=:) はコロン(:)直前の所を指し、 正規表現の、 (?=:) はコロン(:)直後の所を指す。 これを利用して区切ると、コロン(:)も含めた形で区切る事が出来る。 さらに、この二つを or(|) にすると、コロン(:) 自体も文字として配列に収める事が出来る。
1 2 3 4 5 |
String target = "aabb:ccee:dfefs:efsfds:"; String[] splitAfter = target.split("(?<=:)"); String[] splitBefore = target.split("(?=:)"); String[] splitBeforeAndAfter = target.split("((?<=:)|(?=:))"); |
これの結果は、
1 2 3 |
splitAfter = [aabb:, ccee:, dfefs:, efsfds:] splitBefore = [aabb, :ccee, :dfefs, :efsfds, :] splitBeforeAndAfter = [aabb, : ,ccee, :, dfefs, :, efsfds, :] |
となる。もちろんこのコロン(:) の代わりに、正規表現も使える。 コロン(:)に続いて数字が1~3回(多い方)がある場合に区切ると行った場合は、
1 2 3 4 5 |
String target = "abc:12defr:345fefe:678fd232fe"; String[] splitAfter = target.split("(?<=:\\d{1,3}+)"); String[] splitBefore = target.split("(?=:\\d{1,3}+)"); String[] splitBeforeAndAfter = target.split("((?<=:\\d{1,3}+)|(?=:\\d{1,3}+))"); |
これの結果は、
1 2 3 |
splitAfter = [abc:12, defr:345, fefe:678, fd232fe] splitBefore = [abc, :12defr, :345fefe, :678fd232fe] splitBeforeAndAfter = [abc, :12, defr, :345, fefe, :678, fd232fe] |
となる。