Обычно вы используете регулярное выражение, чтобы проверить, является ли строка числом:
julia> re = r"^[+-]?([0-9]+([.][0-9]*)?|[.][0-9]+)$";
julia> occursin(re,"123.")
true
julia> occursin(re,"123.0")
true
julia> occursin(re,"123.012")
true
julia> occursin(re,"123")
true
julia> occursin(re,"ab")
false
julia> occursin(re,"ab123.1")
false
julia> occursin(re,"123.1e")
false
Примечание: я использовал регулярное выражение, найденное в Регулярное выражение для чисел с плавающей запятой Если вы просто хотите иметь целую часть или включить экспоненту, такие готовые регулярные выражения также легко найти.
РЕДАКТИРОВАТЬ: контрольный тест.
Давайте рассмотрим следующую функцию, чтобы проверить, является ли String числом:
function check_str(a)
try
parse(Float64,a)
true
catch
false
end
end
Вот тесты производительности. Обратите внимание, что регулярное выражение примерно в 200 раз быстрее (увеличение было бы меньше, если бы мы решили искать и экспонентную часть) и не выделяло.
julia> using BenchmarkTools
julia> @btime check_str("60.0a")
15.359 μs (18 allocations: 816 bytes)
false
julia> @btime occursin($re,"60.0a")
67.023 ns (0 allocations: 0 bytes)
false
При успешном разборе String
разрыв в скорости значительно уменьшается:
julia> @btime check_str("60.0")
298.833 ns (0 allocations: 0 bytes)
true
julia> @btime occursin($re,"60.0")
58.865 ns (0 allocations: 0 bytes)
true