2 qq 26169787 qq_26169787 于 2016.03.13 16:19 提问

java用正则匹配运算符中的*号报错

这是用正则匹配一个四则运算算式中有几个数字的程序,将 * 号放在最后可以得出正确结果,但是将 * 号放中间的话就会报错,这是为什么?要怎么改?

 public class Blank
{
    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
    }
}
 Exception in thread "main" java.util.regex.PatternSyntaxException: Illegal character range near index 4 [+-\*/]

1个回答

caozhy
caozhy   Ds   Rxr 2016.03.13 22:16
已采纳

方括号里面减号是需要转义的,比如
[A-Z],代表任意大写字母,而不是A,-,Z三个字符

 return s.split("[\\+\\-\\*\\/]").length;

记住转义这个东西宁可多,不可少。

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
正则表达式匹配加减法算法
通过键盘输入100以内正整数的加、减运算式,请编写一个程序输出运算结果字符串。 输入字符串的格式为:“操作数1 运算符 操作数2”,“操作数”与“运算符”之间以一个空格隔开。 补充说明: 1、操作数为正整数,不需要考虑计算结果溢出的情况。 2、若输入算式格式错误,输出结果为“0”。 package test; import java.util.Scanner; public
JAVA利用正则获取算术表达式的数字
前言利用正则表达式匹配算术表达式中的数字,正负均可提取。 临时抱佛脚写的,如果有更好的办法,你会告诉我的对吧?算术表达式String expression = "-40+(-6-4)+-2-91";正则表达式//断言数字左边为符号,符号-会出现0次或1次,再出现数字至少一次的数字 //或者 //以符号-开头,后面是数字 String reg = "((?<=\\(|-|\\+|/|\\*)-?\\
java中"+"号在不同情况下的不同意义(加法运算符还是字符拼接符)
public class DataTypeDemo2 { public static void main(String[] args) { System.out.println('a');//a System.out.println('a'+1);//98 //~:126  //"+"字符串拼接符 在前面都是字符串的情况下  后面结果为拼接后的字符串   //"+"运算符  在前面
JavaSE_有必要用StringBuilder的append代替String的+字符串连接运算么
经常会看到在各种Java编程技术文章,讨论如何提高java代码的运行效率。其中最频繁提到的,就是将代码中String类型对象的+字符串连接运算,使用StringBuilder对象的append方法来代替,用于提高运行效率。   确实,在java程序中,占据最多内存空间的对象就是String,以前谁用过一个内存检测程序,统计了一个系统在运行期间内存占用情况,80%以上的内存空间存储的都是Stri
java中正则表达式用Pattern计算字符串的结果(四则运算);分成有括号和没括号;当然也可以采用逆波兰式
import java.util.regex.Matcher; import java.util.regex.Pattern; public class Arithmetic { /**  * 利用Pattern计算字符串的结果(四则运算),当然也可以采用逆波兰式  * @param args  */ public static void main(String[] args
JAVA 正则表达式 根据错误给予用户提示
今天偶然需要用到正则,对规则有点不熟悉重温了一下。发现网络上大多数都是对正则的正确性判断,但是都没有提到错误地方如何反馈信息。 举个例子说明我的目的:        都知道邮箱的正确格式是XXXXXX@XXX.XXX (比如这样X......X@qq.com),判断格式正确性的正则表达式网上很多。但是我现在想做的是用户输入错误的信息时候及时给用户提供错误的地方。例如 1.首字母不能为数字和英
正则表达式 判断 连号如“123456”、同号如“888888”、连同号如“112233”“222333”
import java.util.regex.Matcher;     import java.util.regex.Pattern;          public class Regu {              public static void main(String[] args) {             //匹配6位顺增             String pa
java中的二元运算符号(特殊符号)
>  大于号  >>   向右移位      eg: 3>>1,3向右移动一位,二进制表示为 11变为1,返回到十进制为 1。 &    位与符    eg: 3 & 1,两数相同位置全为1,才能为1。二进制表示为 11 & 1 变为01,返回到十进制为 1。 |     位或符    eg: 3 | 1,两数相同位置只要有一个为1,就为1。二进制表示为 11 | 1 变为11
JAVA中运算符含义及简单应用
Java运算符 Java提供了丰富的运算符环境。Java有4大类运算符:算术运算、位运算、关系运算和逻辑运算。Java还定义了一些附加的运算符用于处理特殊情况。本章将描述Java所有的运算符,而比较运算符instanceof将在第12章讨论。  注意:如果你对C/C++熟悉,你将会高兴,因为Java的绝大多数运算符和C/C++中的用法一样。但有一些微妙的差别,所以提醒你要仔细阅
使用 正则表达式 验证四则运算表达式
Regex regex = new Regex(@"^           (?#匹配开头)/s*[-+]?         (?#开头可以出现正负号)(((([0-9]/,?[0-9]*)+/.?[0-9]*))+(/s*$|/s*([-+*/]+?|[( (  (?/()/s*       (?#左括号,保存到o名字下)  [-+]?        (?#可选正负号)  (((([0-9]/,