Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

java.util.regex.PatternSyntaxException: Dangling meta character '+' near index 0 +

Tags:

java

regex

I am getting the error when I launch my UI that causes this code to spit the error at me in the title. It works for all of my other operator symbols so I am really not sure what's going on here. I didn't want to post all the code so you can find the rest if this isn't enough on my gitHub: https://github.com/jparr721/Calculator-App/tree/master/src/calculator

public class Calculation_Controls {      public double A, B;      private String[] operators = new String[] {"-","+","/","*","x","^","X"};       /**      * Check for the symbol being used within the TextArea to then      * apply the correct caculation method.      * FIXME - Allow for multiple symbols to be used and have them return      * FIXME - a result in accordance with PEMDAS      *      *@param nums      *      * @return operator, or error      */     public String findSymbol(String nums) {          for (String operator : operators) {             if (nums.contains(operator)) {                 return operator;             }         }         return "invalid input";     }      /**      * Input method to take the user input from the text area      * and apply the correct calculation to it      *      * @param nums - Stores the input as a String which I then convert to an int      *             then back to a string to be printed to the TextArea      *      * @return - The result of the calculation as a string      */     public String input(String nums){          String operator = findSymbol(nums);         if (operator == null){             System.out.println("Invalid input");          }         String[] split = nums.split(operator);         int left = Integer.parseInt(split[0]);         int right = Integer.parseInt((split[1]));         String result = "";          switch (operator){              case "+":                 result = Double.toString(add(left, right));                 break;             case "-":                 result = Double.toString(subtract(left, right));                 break;             case "*":             case "x":             case "X":                 result = Double.toString(multiply(left, right));                 break;             case "/":                 result =  Double.toString(divide(left, right));                 break;             case "^":                 result =  Double.toString(pwr(left, right));                 break;             default:                 System.out.println("Invalid Operator");         }         return result;     } 
like image 526
Jarred Parr Avatar asked Oct 25 '16 17:10

Jarred Parr


1 Answers

There are reserved character in Regex and you should scape these character to achieve what you want. For example, you can't use String.split("+"), you have to use String.split("\\+").

The correct operators would be:

String[] operators = new String[] {"-","\\+","/","\\*","x","\\^","X"}; 
like image 110
Paulo Avatar answered Sep 23 '22 18:09

Paulo