Разбивая строку математического уравнения - PullRequest
3 голосов
/ 07 июня 2011
    Pattern pattern = Pattern.compile("([^\\d.]|[\\d.]++)");
    String[] equation =  pattern.split("5+3--323");
    System.out.println(equation.length);

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

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

Ответы [ 3 ]

7 голосов
/ 07 июня 2011

Попробуйте использовать 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));
    }
}
2 голосов
/ 07 июня 2011

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

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

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

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

    }
}

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

2 голосов
/ 07 июня 2011

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

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

вместо

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...