LoginSignup
5
5

More than 3 years have passed since last update.

splitとjoinで文字列のリスト分割と結合(Perl/PowerShell/Java/Kotlin/Python)

Last updated at Posted at 2019-04-21

テキスト(特にパターン化された書式のテキストファイルを)処理する上で、文字列を指定文字で分割してリストにするsplitと、リストを指定文字で結合して文字列にするjoinは、使いこなせるかどうかで作業時間に大きく差がでてくると個人的に思ってるけど、各言語微妙に癖があるので基本的な使い方をまとめてみた。

言語 バージョン OS
Perl 5.26.1 Ubuntu 18.04
PowerShell 5.1.17763.316 Windows 10 home
Java 1.8.0_131 Windows 10 home
Kotlin 1.3.21 Android 7.0
Python2 2.7.15 Ubuntu 18.04
Python3 3.6.7 Ubuntu 18.04

バージョンはコンパイラ/インタプリタのもの。OSは実行環境。

  • 編集履歴
    • 2019.05.14: KotlinのコードをAndroid非依存のものに変更

split

例はスペース込みカンマ区切りの文字列を分割する。
正規表現はどの言語も基本使えるが、Kotlin・Pythonでは別途ライブラリの利用が必要。

Perl

#!/usr/bin/perl

my $string = "元町・中華街, 日本大通り, 馬車道, みなとみらい, 横浜";
my @item = split /,\s*/, $string;

for my $i (@item) {
    print $i, "\n";
}

実行結果

$ ./split.pl
元町・中華街
日本大通り
馬車道
みなとみらい
横浜

PowerShell

$string = "元町・中華街, 日本大通り, 馬車道, みなとみらい, 横浜"
$item = $string -split ",\s*"

foreach ($i in $item) {
    Write-Output $i
}

実行結果

PS C:\Users\zaki\src\share> .\split.ps1
元町・中華街
日本大通り
馬車道
みなとみらい
横浜
PS C:\Users\zaki\src\share>

ソースのエンコードはShift-JIS

Java

    private static void sprit_example() {
        String string = "元町・中華街, 日本大通り, 馬車道, みなとみらい, 横浜";
        String[] item = string.split(",\\s*");
        for (String i : item) {
            System.out.println(i);
        }
    }

実行結果

元町・中華街
日本大通り
馬車道
みなとみらい
横浜

Kotlin

fun split_join() {
    val string: String = "元町・中華街, 日本大通り, 馬車道, みなとみらい, 横浜"
    val item = string.split(",")
    for (i in item) {
        println(i)
    }
}

実行結果

元町・中華街
 日本大通り
 馬車道
 みなとみらい
 横浜

Javaと異なり、正規表現はそのまま使えず、Regexインスタンスを作る必要がある。

fun split_regexp() {
    val string: String = "元町・中華街, 日本大通り, 馬車道, みなとみらい, 横浜"
    val item = string.split(Regex(",\\s*"))
    for (i in item) {
        println(i)
    }
}
元町・中華街
日本大通り
馬車道
みなとみらい
横浜

Python2

#!/usr/bin/python2
# -*- coding: utf-8 -*-

string = "元町・中華街, 日本大通り, 馬車道, みなとみらい, 横浜"
item = string.split(", ")

for i in item:
    print i

出力は以下の通り

元町・中華街
日本大通り
馬車道
みなとみらい
横浜

正規表現を使用するには、reのインポートが必要。

import re
item = re.split(r',\s*', string)
for i in item:
    print i

Python3

Python2と同様。

#!/usr/bin/python3

string = "元町・中華街, 日本大通り, 馬車道, みなとみらい, 横浜"
item = string.split(", ")

for i in item:
    print(i)


import re
item = re.split(r',\s*', string)
for i in item:
    print(i)

join

各言語、前述のsplitでリストになったものと同等のitem配列を宣言し、「","で結合して、前後に"を追加」して、「クォートされた文字列のカンマ区切り」にするコード。
(前後への"追加は単純な文字列連結で処理)

Perl

my @item = ("元町・中華街", "日本大通り", "馬車道", "みなとみらい", "横浜");
my $join = '"' . (join '","', @item) . '"';
print $join, "\n";

実行結果

"元町・中華街","日本大通り","馬車道","みなとみらい","横浜"

PowerShell

$item = @("元町・中華街", "日本大通り", "馬車道", "みなとみらい", "横浜")
$join = '"' + ($item -join '","') + '"'
Write-Output $join

実行結果

"元町・中華街","日本大通り","馬車道","みなとみらい","横浜"

Java

String item[] = {"元町・中華街", "日本大通り", "馬車道", "みなとみらい", "横浜"};
String join = "\"" + String.join("\",\"", item) + "\"";
System.out.println(join);

実行結果

"元町・中華街","日本大通り","馬車道","みなとみらい","横浜"

Kotlin

val item = arrayOf("元町・中華街", "日本大通り", "馬車道", "みなとみらい", "横浜")
val join = '"' + item.joinToString(separator = "\",\"") + '"'
println(join)

実行結果

"元町・中華街","日本大通り","馬車道","みなとみらい","横浜"

Python2

item = ["元町・中華街", "日本大通り", "馬車道", "みなとみらい", "横浜"]
join = '"' + '","'.join(item) + '"'
print join
"元町・中華街","日本大通り","馬車道","みなとみらい","横浜"

Python3

こちらもPython2と同じ

item = ["元町・中華街", "日本大通り", "馬車道", "みなとみらい", "横浜"]
join = '"' + '","'.join(item) + '"'
print(join)

実行結果

"元町・中華街","日本大通り","馬車道","みなとみらい","横浜"
5
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
5