查看原文
其他

Julia 笔记之字符串

JunJunLab 老俊俊的生信笔记 2022-08-17

没关注?伸出手指点这里---

1引言

本文介绍 Julia 中的 字符串 操作。

内容摘抄自 Think julia 书籍。

2字符

单个引号引起的单个字符:

julia> 'x'
'x': ASCII/Unicode U+0078 (category Ll: Letter, lowercase)
julia> '🍌'
'🍌': Unicode U+01f34c (category So: Symbol, other)
julia> typeof('x')
Char

3多字符字符串

双引号引得多字符字符串,可以使用中括号以索引取值,注意 julia 中索引以 1 开始:

julia> fruit = "banana"
"banana"
julia> letter = fruit[1]
'b': ASCII/Unicode U+0062 (category Ll: Letter, lowercase)

关键词 beginend 可以取第一个和最后一个字符:

julia> fruit[end]
'a': ASCII/Unicode U+0061 (category Ll: Letter, lowercase)

中括号里可以使用表达式取值:

julia> i = 1
1
julia> fruit[i+1]
'a': ASCII/Unicode U+0061 (category Ll: Letter, lowercase)
julia> fruit[end-1]
'n': ASCII/Unicode U+006e (category Ll: Letter, lowercase)

不是整型则会报错:

julia> letter = fruit[1.5]
ERROR: MethodError: no method matching getindex(::String, ::Float64)

4length

length 函数获取字符串个数:

julia> fruits = "🍌 🍎 🍐"
"🍌 🍎 🍐"
julia> len = length(fruits)
5

获取最后一个元素:

julia> last = fruits[len]
' ': ASCII/Unicode U+0020 (category Zs: Separator, space)

但你可能得不到你想要的。字符串使用 UTF-8 编码。UTF-8 是一种可变宽度编码,这意味着不是所有字符都用相同的字节数编码。

sizeof 函数可以获取字节数:

julia> sizeof("🍌")
4

因为表情符号编码为 4 个字节,字符串索引是基于字节的,水果的第 5 个元素是 SPACE。这也意味着 UTF-8 字符串的每个字节索引不一定是字符的有效索引。如果你在这样一个无效的字节索引处对字符串进行索引,则会抛出错误:

julia> fruits[2]
ERROR: StringIndexError("🍌 🍎 🍐"2)

在 fruits 的情况下,字符是一个四字节字符,因此索引 2、3 和 4 无效,下一个字符的索引是 5;下一个有效索引可以由 nextind(fruits, 1)计算,之后的下一个索引可以由 nextind(fruits, 5)计算,依此类推。

5遍历字符串

prefixes = "JKLMNOPQ"
suffix = "ack"

for letter in prefixes
    println(letter * suffix)
end

Jack
Kack
Lack
Mack
Nack
Oack
Pack
Qack

6字符串切片

julia> str = "Julius Caesar";

julia> str[1:6]
"Julius"

使用关键词:

julia> str[8:end]
"Caesar"

如果第二个索引大于第一个,则返回空字符串:

julia> str[8:7]
""

7字符串不可变

字符串内容不可改变,使用切片赋值则会报错:

julia> greeting = "Hello, world!"
"Hello, world!"
julia> greeting[1] = 'J'
ERROR: MethodError: no method matching setindex!(::String, ::Char, ::Int64)

8字符串插值

Julia 中可以使用$符号将变量插入到字符串中:

julia> greet = "Hello"
"Hello"
julia> whom = "World"
"World"
julia> "$greet, $(whom)!"
"Hello, World!"

加上括号可以识别表达式:

julia> "1 + 2 = $(1 + 2)"
"1 + 2 = 3"

9字符串库

uppercase 函数转换为大写, lowercase则转为小写, titlecase 将首字母转为大写:

julia> uppercase("Hello, World!")
"HELLO, WORLD!"

julia> lowercase("TEST")
test

julia> titlecase("title")
Title

findfirst 函数查找字符并返回索引:

julia> findfirst("a""banana")
2:2

julia> findfirst("na""banana")
3:4

可以加个寻找起始位置的索引:

julia> findnext("na""banana"4)
5:6

10∈ 操作符

(\in TAB)打出来,判断字符是否在指定的字符串中,返回 true 或 false:

julia> 'a' ∈ "banana"    # 'a' in "banana"
true

11字符串比较

使用 == 可以判断两个字符串是否相等:

word = "Pineapple"
if word == "banana"
    println("All right, bananas.")
end

其他关系操作对于按字母顺序排列单词也很有用:

if word < "banana"
    println("Your word, $word, comes before banana.")
elseif word > "banana"
    println("Your word, $word, comes after banana.")
else
    println("All right, bananas.")
end

Your word, Pineapple, comes before banana.

Julia 处理大写字母和小写字母的方式与人们不同。所有的大写字母都在小写字母之前




  老俊俊生信交流群 ,QQ,


老俊俊微信:


知识星球:



今天的分享就到这里了,敬请期待下一篇!

最后欢迎大家分享转发,您的点赞是对我的鼓励肯定

如果觉得对您帮助很大,赏杯快乐水喝喝吧!



  





Julia 笔记之数学运算和初等函数

XAM 包处理 sam 和 bam 文件

Nature 文章主图结果复现

windows 也能快速处理 BAM/SAM 大型文件

Julia 笔记之变量-整数-浮点数

cell 代码优化测试复现二 (终)

cell 代码优化测试复现一

R 语言绘制二维密度相关性散点图

Julia 的下载安装及配置

使用 python 进行 Ribo-seq 质控分析 二

◀...

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存