2.3 字符串的分割

问题

你想根据一个字段分隔符将一个字符串分成几个部分,比如从逗号分隔值(CSV)文件或者管道分隔文件中得到特定的字符串。

解决方案

使用String对象上一个可用的split方法:

split方法返回一个字符串数组,可以将其当作一个普通的数组:

讨论

可以使用简单字符作为分隔符来分隔字符串,就像用逗号作为分隔符CSV文件一样:

使用这种方法,最好对每个字符串进行trim。在返回数组之前,使用map方法对每个字符串调用trim:

也可以使用正则表达式来分隔一个字符串,下面这个例子告诉我们如何根据空白字符来分隔字符串:

不是所有CSV文件都一样

注意,一些声称自己是CSV文件的文件实际上可能在其字段中包含逗号,它们通常会使用单引号或者双引号括起来,而其他文件可能在其字段中包含换行符。处理这类文件的算法将比所示方法更复杂。更多信息见维基百科关于CSV文件的条目(https://oreil.ly/Feugs)。

关于split方法

split方法有多个重载版本,有些来自Java的String类,有些来自Scala的StringOps类。例如,如果用Char而不是String作为参数来调用split,使用的就是StringOps的split: