Julia Language

[Julia] 기초 문법 공부 - 문자열을 다루기에 유용한 함수들

공부하는백수 2021. 4. 17. 16:56

※ 다음 링크에서 줄리아 프로그래밍과 관련한 글 목록을 확인하실 수 있습니다.

Julia 프로그래밍 관련 글 목록

 

 아래의 글을 먼저 보시면 이해에 더 도움이 됩니다.

[Julia] 기초 문법 공부 - 문자와 문자열의 모든 것


이전 글에서 다루었던 다음 함수들에 대한 예제 코드는 생략한다.

  • length 함수: 문자열의 길이를 반환
  • sizeof 함수: 문자열의 크기를 바이트 단위로 반환
  • repeat 함수: 입력된 문자열을 원하는 수만큼 반복 (문자열 뿐만 아니라 어레이에도 동작)
  • replace 함수: 문자열 내 특정 패턴을 내가 원하는 패턴으로 치환
  • string 함수: 입력 인자를 문자열로 변환. 입력된 숫자, 문자를 문자열로 변환하며 여러 문자열을 입력 받았을 경우 문자열들을 병합함.

parse 함수

두 번째 인자로 입력받은 문자열을 첫 번째 인자에 지정된 데이터 타입으로 변환

1
2
3
4
julia> parse(Int64, "3")
3
julia> parse(Float64, "3")
3.0
cs

 

finefirst, findnext, fineprev

주어진 문자열에서 특정 문자나 문자열 패턴이 존재하는 위치를 찾는데 활용

findfirst: 문자열 내에 특정 문자나 문자열이 위치한 인덱스 중 가장 작은 인덱스 반환

findnext/findprev: 세 번째 인자로 지정된 위치를 기준으로 이후/이전에 특정 문자의 위치를 인덱스로 반환

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
# findfirst
julia> str = "ABCDEFG"
"ABCDEFG"
 
julia> findfirst(isequal('F'), str)
6
 
julia> println(findfirst(isequal('z'), str)) # no matched result
nothing
 
julia> findfirst("ABC"str)
1:3
 
julia> findfirst(isequal("F"), str# 아무것도 출력되지 않음 (잘못 사용)
 
julia> findfirst(isequal("F"), str=== nothing # identity check
true
 
julia> findfirst(isequal("F"), str== nothing # equality check
true
 
# findnext
julia> findnext('F'str3)
6
 
# findprev
julia> findprev('A'str3)
1
 
julia> findprev("A"str3)
1:1
 
julia> findprev(isequal("A"), str3# 아무것도 출력되지 않음 (잘못 사용)
 
julia> findprev(isequal('A'), str3)
1
 
cs

※ NOTE (findfirst/findnext/findprev 함수 사용과 관련하여)

  • isequal 함수는 char형 문자를 입력으로 하는 경우에만 제대로 동작한다.
  • char형을 입력받는다면 isequal 함수가 없어도 잘 동작한다.
  • string type을 isequal 함수와 사용하면 무조건 잘못된 결과가 나온다.
  • isequal을 쓰는 것은 익명함수(autonomus function)과 관련된 것으로 보이는데 아직 나중에  꼭! 살펴보자.
  • 결론적으로 위 함수들을 정상적으로 사용하려면 char 패턴은 isequal 함수와 함께 사용하고, string 패턴은 그냥 단독으로 사용한다.
  • 정상적으로 함수를 사용하였다는 가정하에 매칭되는 패턴이 없을 경우 출력은 nothing이다.
  • 아래 예제에서 "===" 연산자는 두 객체의 identity를 체크하는 연산자이다. 즉, 두 객체가 단순히 값만 같다면(euality) true를 출력하는 "==" 연산자와 달리 "===" 연산자가 true라면 두 객체는 완전히 동일한 하나 객체이다.

 

uppercase, lowercase

대소문자 변환

1
2
3
4
5
julia> lowercase(str)
"abcdefg"
 
julia> uppercase(str)
"ABCDEFG"
cs

 

contains, occursin, (\in 연산자)

contains: 문자열 내 특정 문자열 패턴이 존재하는지 확인

  • contains(A, B) → A contains B가 참인지 체크

occursin: contains와 인자의 위치만 다르고 동작은 동일

  • occursin(A, B) → A occurs in B가 참인지 체크

\in+tab 연산자: contains 함수와 유사하지만 문자 하나의 포함 여부만을 체크할 수 있음 (문자열은 안됨)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
# contains
julia> contains(str"A")
true
 
julia> contains(str"H")
false
 
julia> contains(str"AB")
true
 
julia> contains(str'A')
true
 
# occursin
julia> occursin("AB"str)
true
 
julia> occursin("a"str)
false
 
julia> occursin('z'str)
false
 
# \in+tab
julia> println('B' ∈ str)
true
cs

 

collect, split, join

collect: 입력받은 문자열을 문자 배열로 변환

split: 문자열을 공백(혹은 지정된 문자를 기준으로) 분리

join: 여러 개의 문자열을 입력 받은 후, 지정된 문자들을 문자열 사이에 삽입하여 하나의 문자열로 결합 (공백없이 결합할 시 문자열 병합연산과 같으며 string 함수를 사용하는 것과 동일)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
julia> str = "i love Julia";
# collect
julia> char_arr = collect(str);
julia> println(char_arr)
['i'' ''l''o''v''e'' ''J''u''l''i''a']
 
# split (공백으로 분리, 기본값)
julia> split_str = split(str);
julia> println(split_str)
SubString{String}["i""love""Julia"]
 
# join
julia> join_str = join(split_str, " "" ");
julia> println(join_str)
i love Julia
 
# split (지정문자를 기준으로 분리)
julia> println(split("a,b,c,e,d,f,g"","))
SubString{String}["a""b""c""e""d""f""g"]
cs