2014-11-08 4 views
-1

Я думал о проблеме в течение дня, но все еще не могу ее решить. У меня есть ввод формулы, например, «11 + 1 + 1 + 2». без пробеловИспользование Split() в арифметической формуле

Я хочу разбить формулу в соответствии с оператором. Тогда я написал, как эти:

String s = "11+1+1+2"; 
String splitByOp[] = s.split("[+|-|*|/|%]"); 
for(int c=0; c < splitByOp.length; c++){ 
System.out.println(splitByOp[c]); 


The output is: 
11 
1 
1 
2 

Я хочу поставить операнд (вывод), а также оператор (+) в ArrayList. Но как я могу сохранить оператора после их сплит?

Я пытаюсь создать еще один массив для разделения числа.

String operator[] = s.split("\\d"); 

Но результат 11 стал 1 1. Длина оператора [] 5.

Другими словами, как я могу выступать, как:

The output: 
11 
+ 
1 
+ 
1 
+ 
2 
+0

* Некоторые люди, сталкиваясь с проблемой, думаю «Я знаю, я буду использовать регулярные выражения.» Теперь у них есть две проблемы. * - Джейми Завински –

+0

Использование «\ б ". Я смотрю значение \ b в w3schools: найдите совпадение в начале/конце слова. Это означает, что java match автоматически? – annie

ответ

1

Вы должны разделить по регулярному выражению не принимается. В частности, на «границе слова»:

String[] terms = s.split("\\b"); 

«пограничное слово» разрыв между словом полукоксом и без слов полукокса, но цифры классифицируются как слово символы. Важно отметить, что совпадение не потребляет, поэтому все содержимое ввода сохраняется в разделенных терминах.


Вот некоторые тестовый код:

String s = "11+1+1+2"; 
String[] terms = s.split("\\b"); 
for (String term : terms) 
    System.out.println(term); 

Выходные:

11 
+ 
1 
+ 
1 
+ 
2 
+0

Я собирался сказать ... «это не выглядело как обход». :) +1 –

0

Вы могли бы объединить/касательно последующего просмотра назад утверждения

String[] array = s.split("(?=[+])|(?<=[+])"); 
0
public static void main(String[] args) { 

     String s = "11+1+1+2"; 
     String[] terms = s.split("(?=[+])|(?<=[+])"); 
     System.out.println(Arrays.toString(terms)); 
    } 

выход

[11, +, 1, +, 1, +, 2]