4.11 String拆分
“哥,我感觉字符串拆分没什么可讲的呀,直接上 String 类的 split()
方法不就可以了!”三妹毫不客气地说。
“假如你真的这么觉得,那可要注意了,事情远没这么简单。”我微笑着说。
假如现在有这样一串字符序列“沉默王二,一枚有趣的程序员”,需要按照中文逗号“,”进行拆分,这意味着第一串字符序列为逗号前面的“沉默王二”,第二串字符序列为逗号后面的“一枚有趣的程序员”。
“这不等于没说吗?哥!”还没等我说,三妹就打断了我。
“别着急嘛,等哥说完。”我依然保持着微笑继续说,“在拆分之前,要先进行检查,判断一下这串字符是否包含逗号,否则应该抛出异常。”
public class Test {
public static void main(String[] args) {
String cmower = "沉默王二,一枚有趣的程序员";
if (cmower.contains(",")) {
String [] parts = cmower.split(",");
System.out.println("第一部分:" + parts[0] +" 第二部分:" + parts[1]);
} else {
throw new IllegalArgumentException("当前字符串没有包含逗号");
}
}
}
“三妹你看,这段代码挺严谨的吧?”我说,“来看一下程序的输出结果。”
第一部分:沉默王二 第二部分:一枚有趣的程序员
“的确和预期完全一致。”三妹说。
“这是建立在字符串是确定的情况下,最重要的是分隔符是确定的。否则,麻烦就来了。”我说,“大约有 12 种英文特殊符号,如果直接拿这些特殊符号替换上面代码中的分隔符(中文逗号),这段程序在运行的时候就会出现以下提到的错误。”
- 反斜杠
\
(ArrayIndexOutOfBoundsException) - 插入符号
^
(同上) - 美元符号
$
(同上) - 逗点
.
(同上) - 竖线
|
(正常,没有出错) - 问号
?
(PatternSyntaxException) - 星号
*
(同上) - 加号
+
(同上) - 左小括号或者右小括号
()
(同上) - 左方括号或者右方括号
[]
(同上) - 左大括号或者右大括号
{}
(同上)
“那遇到这些特殊符号该怎么办呢?”三妹问。
“用正则表达式。”我说,“正则表达式是一组由字母和符号组成的特殊文本,它可以用来从文本中找出满足你想要的格式的句子。”
我在 GitHub 上找打了一个开源的正则表达式学习文档,非常详细。一开始写正则表达式的时候难免会感觉到非常生疏,你可以查看一下这份文档。记不住没关系,遇到就查。
除了这份文档,还有一份:
作者收集了一些在平时项目开发中经常用到的正则表达式,可以直接拿来用。
“哥,你真周到。”三妹笑着说。
“好了,来用英文逗点 .
替换一下分隔符。”我说。
String cmower = "沉默王二.一枚有趣的程序员";
if (cmower.contains(".")) {
String [] parts = cmower.split("\\.");
System.out.println("第一部分:" + parts[0] +" 第二部分:" + parts[1]);
}
由于英文逗点属于特殊符号,所以在使用 split()
方法的时候,就需要使用正则表达式 \\.
而不能直接使用 .
。
“为什么用两个反斜杠呢?”三妹问。
“因为反斜杠本身就是一个特殊字符,需要用反斜杠来转义。”我说。
当然了,你也可以使用 []
来包裹住英文逗点“.”,[]
也是一个正则表达式,用来匹配方括号中包含的任意字符。
cmower.split("[.]");
除此之外, 还可以使用 Pattern 类的
回复