Mac で Julia #7 Strings

前回に引き続きJuliaについてです。

[ドキュメント](https://docs.julialang.org/)に沿って試していきます。

よく使うのを試します。

### length


```julia
julia> Base.length("abcdefg")
7

julia> Base.length("日本語")
3

julia> length("日本語")
3
```

Baseモジュールのメソッドです。普通ですかね。


### Concatenate

```julia
julia> "こんにちは" * "日本"
"こんにちは日本"

julia> "こんにちは" + "日本"
ERROR: MethodError: no method matching +(::String, ::String)
Closest candidates are:
  +(::Any, ::Any, ::Any, ::Any...) at operators.jl:502
Stacktrace:
 [1] top-level scope at none:0

julia> "こんにちは" . "日本"
ERROR: syntax: space before "." not allowed in ""こんにちは" ."

julia> "こんにちは" * "日本" * 'JJ'
ERROR: syntax: invalid character literal

julia> "こんにちは" * "日本" * 'J'
"こんにちは日本J"
```

文字列の結合です。```.```や```+```ではなく```*```なんですね。

### Base.string

```julia
julia> string(16,base = 10,pad =4)
"0016"

julia> string(16,base = 8,pad =4)
"0020"

julia> string(16,base = 2,pad =4)
"10000"
```

16進数とか桁数で文字列にできるってことですかね。

### Base.SubString

```julia
julia> Base.SubString("abcde", 1, 2)
"ab"

julia> Base.SubString("abcde", 1:2)
"ab"

julia> Base.SubString("abcde", 2:4)
"bcd"

julia> Base.SubString("abcde", 2,2)
"b"

julia> Base.SubString("abcde", 2,4)
"bcd"

julia> Base.SubString("abcde", 3,4)
"cd"

julia> Base.SubString("abcde", 3)
"cde"
```

インデックスで指定するのと```2:4```みたいにレンジで指定するのがあるんですね。

### 正規表現

```julia
julia> Base.match(r"[0-9]+"ism ,"abc123ed456")
RegexMatch("123")

julia> a.match
"123"
```

正規表現も使えます。

### Base.lpad

```julia
julia> Base.lpad("THANK",1)
"THANK"

julia> Base.lpad("THANK",10)
"     THANK"
```

右詰（左にスペース）を指定できます。

### Base.rpad

```julia
julia> Base.rpad("THANK",1)
"THANK"

julia> Base.rpad("THANK",10)
"THANK     "
```

lpadと逆ですね。

### Base.split

```julia
julia> a = split("1,2,3,4,5,,,,",",")
9-element Array{SubString{String},1}:
 "1"
 "2"
 "3"
 "4"
 "5"
 ""
 ""
 ""
 ""

julia> length(a)
9
```

CSVなどでカンマが連続しててもちゃんと分割してくれるようです。

### Base.strip

```julia
julia> strip("{Hello}\n", ['{', '}', '\n'])
"Hello"
```

改行文字の除去とかに使えそうです。

### Base.startswith

```julia
julia> Base.startswith("HelloWorld","World")
false

julia> Base.startswith("HelloWorld","Hello")
true
```

start**s**withなんですね。

### Base.Unicode.uppercase、lowercase 

```julia
julia> uppercase("Julia")
"JULIA"

julia> lowercase("JuLIA")
"julia"
```

うむ、普通です。

### Base.Unicode.titlecase

```julia
julia> titlecase("the JULIA programming language")
"The Julia Programming Language"

julia> titlecase("the JULIA programming language" , strict=false)
"The JULIA Programming Language"
```

英文にしか使わないかも。

### Base.join

```julia
julia> join(["apples", "bananas", "pineapples"], ", ", " and ")
"apples, bananas and pineapples"

julia> join(["apples", "bananas", "pineapples"], ", ")
"apples, bananas, pineapples"

julia> join(["apples", "bananas", "pineapples"], ", ","と")
"apples, bananasとpineapples"
```

3つ目の引数がこれまた英語っぽいでですね。

```julia
julia> join(split("1,2,3,4,,,,,",","), " - ")
"1 - 2 - 3 - 4 -  -  -  -  - "
```

普通に使えます。

### Base.chop、chomp

```julia
julia> chop("ABC.")
"ABC"

julia> chomp("ABC.")
"ABC."

julia> chomp("ABC\n")
"ABC"

julia> chomp("ABC\r\n")
"ABC"
```

普通にいい感じです。

### Base.Unicode.isnumeric

```julia
julia> isnumeric('௰')
true

julia> isnumeric('9')
true

julia> isnumeric('α')
false

julia> isnumeric('❤')
false
```

わかりますけどー、௰を数値にしちゃうのか...


今日はこの辺で。