web-dev-qa-db-ja.com

Juliaには文字列「contains」サブストリングメソッドがありますか?

文字列に特定の部分文字列が含まれているかどうかをテストし、含まれている場合は、それが発生するインデックスをテストしようとしています。ジュリアでどうすればいいですか?

5
logankilpatrick

(私の知る限りでは)すべての出現のインデックスを返すJulia関数はありませんが、findnextを使用して簡単に作成できます。

_Julia> import Base.findall
Julia> function findall(pattern,string::AbstractString)
    toReturn = UnitRange{Int64}[]
    s = 1
    while true
        range = findnext(pattern,string,s)
        if range == nothing
             break
        else
            Push!(toReturn, range)
            s = first(range)+1
        end
    end
    return toReturn
end

Julia> st = "Today is a fresh day: not too warm, not to cold, just fresh!"
"Today is a fresh day: not too warm, not to cold, just fresh!"
Julia> ranges = findall("fresh",st)
2-element Array{UnitRange{Int64},1}:
 12:16
 55:59
Julia> st2 = "aaffssffssffbbffssffcc"
"aaffssffssffbbffssffcc"
Julia> ranges = findall("ffssff",st2)
3-element Array{UnitRange{Int64},1}:
 3:8  
 7:12 
 15:20
Julia> ranges = findall("zz",st2)
0-element Array{UnitRange{Int64},1}
_

完全な独立パターンのみを考慮したい場合は、s = first(range)+1s = last(range)+1に置き換えます。

1
Antonello