1. 前言
今天帮同学做题的时候涉及到利用小数点切分字符串, 感觉以后在后台开发中可能会遇到这个问题, 所以记录一下.
2. 概述
错误的处理方式, 编译能通过, 运行时且不会报错, 但是输出结果是0,
String input = "hello.java";
String[] outputs = input.split(".");
System.out.println(outputs.length);
正确的处理方式
String input = "hello.java";
String[] outputs = input.split("\\.");
System.out.println(outputs.length);
3. 解释
首先抛出来2个问题:
问题1: 小数点不是转义字符, 为什么不能直接用split(.)?
问题2: 为什么非要加2个反斜杠, 只加1个不行吗?
下面给出解释
解答问题1: split里面的参数是正则表达式, 在正则表达式中, 小数点表示可以匹配任意字符, 所以不能直接用小数点.
解答问题2: 由于问题1已经解决, 很自然的想法就是加上反斜杠来进行转义, 而且这个转义语法其实只有正则表达式能够识别, Java语言中并不支持这种转义, 所以只加一个反斜杠是不行的, 再通俗点说就是, 我要告诉正则表达式2个字符, 一个是反斜杠, 一个是小数点, 反斜杠由于是特殊字符, 所以我要通过转义了告诉正则表达式, 而小数点不是特殊字符, 所以我可以直接告诉正则表达式, 最后的结果就是两个反斜杠+小数点.