现在一道题目如下:
java中提供了对正则表达式的支持。
有的时候,恰当地使用正则,可以让我们的工作事半功倍!
如下代码用来检验一个四则运算式中数据项的数目,请填写划线部分缺少的代码。
注意:只填写缺少代码,不要写任何多余内容,例如,已有的双引号。
public class A
{
public static int f(String s)
{
return s.split("________________").length;
}
public static void main(String[] args)
{
System.out.println(f("12+35*5-2*18/9-3")); //7
System.out.println(f("354*12+3-14/7*6")); //6
}
首先,我们需要复习一下split方法,首先我们要从源码入手。
Splits this string around matches of the given(将此字符串拆分为给定的匹配项)。这是官方给出的注解。
public String[] split(String regex, int limit)
regex : the delimiting regular expression (分界正则表达式)
limit : 结果份数
return: the array of strings computed by splitting this string around matches of the given regular expression(通过将此字符串拆分为给定正则表达式的匹配来计算的字符串数组)
在这个API中有几行注释我们来看一下:
/* fastpath if the regex is a
(1)one-char String and this character is not one of the
RegEx's meta characters ".$|()[{^?*+\\", or
(2)two-char String and the first char is the backslash and
the second is not the ascii digit or ascii letter.
*/
就是说,如果regex是一个字符的String,则这个字符不能是".$|()[{^?*+\",中的一种,如果是两个字符的String,第一个为反斜杠,第二个不为ASCII数字和字符。
简单来说就是如果是转义字符,则需要加上 **\\ **
这里列举一下 常见的转义字符:
1.特殊字符:
\":双引号
\’:单引号
\\:反斜线
2.控制字符:
\’ 单引号字符
\\ 反斜杠字符
\r 回车
\n 换行
\f 走纸换页
\t 横向跳格
\b 退格
下面我们测试一个例子:
public class TestSplit {
public static void main(String[] args) {
String s = new String("abc,bced,def");
System.out.println("第一个分割结果:");
for(String x:s.split(","))
System.out.println(x);
System.out.println("第二个分割结果:");
String s1 = new String("ab/cd*efg+shie.dsd");
for(String x:s1.split("\\/|\\*|\\+|\\.")) //多个字符可以用"|"连接
System.out.println(x);
}
}
测试结果:
第一个分割结果:
abc
bced
def
第二个分割结果:
ab
cd
efg
shie
dsd
现在我们回到例题,可以看到,检验一个四则运算式中数据项的数目就是分割字符串后返回的字符串数组长度。所以题目中的空应该填:\\+|\\-|\\*|\\/
return s.split("\\+|\\*|\\-|\\/").length;
运行结果:
7
6