
3.4 字符串的定制化输出
字符串这种数据往往是非结构化的,因此在实际工作中往往要对其进行一定的调整才能够使用,下面将介绍几种常见的字符串定制化输出,包括大小写转化、空格的补全与缩减等。
1.字符串大小写转换
实现字符串大小写转换的函数包括str_to_lower/str_to_upper/str_to_title/str_to_sentence。英文字母需要区分大小写,但是很多场景下一些问题是大小写不敏感的,因此可能需要统一。str_to_lower函数和str_to_upper函数能够分别把英文字符串统一转换为小写格式和大写格式:

标点符号没有大小写之分,因此不会进行转换。还有一种转换方法叫作“标题转换”,能够将所有单词的首字母改为大写,但是其他部分则转为小写格式,如下所示。

可以看出,所有单词的首字母都转化为大写,其余则转化为了小写形式。
最后介绍让英文符合句子中的转化函数str_to_sentence,它能够把所有内容按照正常句子的形式输出,如下所示。

因为两个单词中间是逗号,因此第二个单词是小写,完全符合英文中句子的格式。
2.指定字符串的输出长度
指定字符串输出长度的函数包括str_pad/str_trunc。字符串的长短不一,但是有的时候输出的字符串需要指定固定的长度。如果字符串短了,则需要补充其他字符;如果字符串长了,则需要截断。在补全的过程中,一般会使用空格进行填充。例如在一个长度为 30的框中,要将文字内容居中,就可以使用str_pad函数实现,如下所示。

首先,函数保证输出的字符串长度为30,而把side设定为“both”则表示在目标字符串“HOPE”两侧补空格。如果需要让“HOPE”靠左侧或者右侧,可以把side参数分别设置为“left”或“right”,如下所示。

补全过程中也可以不用空格,而采用其他符号进行填充,例如下面用井号(“#”)进行填充。

这样,两侧的空格就全部变为井号,长度依然是30。如果字符太长,需要截断,一般用省略号进行替代。例如我们前面保存在en_string中的英文句子,如果只能够显示 30个字符,那么可以用str_trunc函数进行截断。

最后能够保证字符串的长度依然是30,但是只有前27个字符是原来的句子成分,最后以3个句点构成的省略号进行截断。默认是截断后方的内容,其实也可以对前面内容进行截断。

截断的符号也可以通过ellipsis参数进行设定,例如我们使用“!!!”作为末尾的截断。

3.空格转换(str_trim/str_squish)
在文本数据挖掘的时候,空格往往是不提供额外信息的。如果一个字符串左边或右边有大量的空格,那么就可以直接去除掉。str_trim函数能够把任意字符两边所存在的空格全部清除掉。

如果只想清除左边的空格,可以将side参数设定为“left”。

此外,如果空格不在两端,一般不会进行处理。但是实际工作中发现有的空格在行文之间具有很大的长度,因此还需要进行特殊处理。str_squish函数就可以做到这一点,它不仅能够把两端的空格全部清除掉,还能够把任意长度大于1的空格都缩减为长度为1的空格,如下所示。
