Разбиение строки математического уравнения на части

#java #regex

#java — язык #регулярное выражение #java

Вопрос:

     Pattern pattern = Pattern.compile("([^\d.]|[\d.]  )");
    String[] equation =  pattern.split("5 3--323");
    System.out.println(equation.length);
  

Я пытаюсь разделить числа (могут быть группами) и ненумерованные, в этом примере я надеялся на массив размером 6:
5, , 3, -, -, 323

как я могу это сделать?

Комментарии:

1. Разве вы не пытаетесь разобрать математическое выражение ?

Ответ №1:

Попробуйте использовать matcher, как в примере ниже. Это возвращает именно то, что вам нужно.

 import java.util.Arrays;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class MathSplitTest
{
    public static void main(String[] args)
    {
        Pattern pattern = Pattern.compile("[0-9] |[- ]");
        String string = "5 3--323";                 
        Matcher matcher = pattern.matcher(string);
        while(matcher.find())
            System.out.println("g0=" matcher.group(0));
    }
}
  

Комментарии:

1. есть больше, чем просто — и , но было достаточно легко добавить другие, и это дает мне то, что я искал. Спасибо

2. @smerny Приятно слышать, что это решает вашу проблему. Да, я знаю, например, есть еще как минимум две операции / *

Ответ №2:

Как насчет использования

 new java.util.Scanner(new java.io.StringReader("5 3--323"));
  

вместо этого?

http://download.oracle.com/javase/6/docs/api/java/util/Scanner.html

Ответ №3:

Если ваши числа разделены запятыми, сначала обозначьте строку;

 tok = new StringTokenizer(string, ",");
  

затем попробуйте создать число из каждого токена. Если это не число, то это символ:

 while (tok.hasMoreTokens()){
    String tok = tok.nextTok();
    try {
          new Integer(tok);
    }catch (NumberFormatException e){

    }
}
  

Если tok не является числом, то генерируется исключение NumberFormatException.