2010-12-11 2 views
4

мне было интересно, если бы можно было разделить строку на пробелах, и избежать всех цифр, пробела и оператор, такие как + и -Разделить строку на пробельных, числах и оператор с регулярным выражением

Это то, что я есть, но я считаю, что это неправильно

String [] temp = expression.split("[ \\+ -][0-9] "); 

Пусть у меня есть выражение

x+y+3+5+z 

Я хочу, чтобы избавиться от всего остального и только положить х, у и г в массив

+1

* разделить строку на пробелы и избежать всех ... пробельные *? Можете ли вы привести несколько примеров того, что вы хотите сделать на разных входах и каков должен быть результат? –

+0

Что значит «избегать»? – ajwood

+0

Я имею в виду, что пробелы не должны быть в массиве, который я разделил –

ответ

1

Я думаю, что вы имеете в виду это:

String[] temp = expression.split("[\\s0-9+-]+"); 

Это расщепляется на пробельных, от 0 до 9, и +-. Обратите внимание, что символы появляются в одном классе символов, а не в нескольких отдельных классах символов. Также - не нуждается в экранировании, потому что он находится в конце класса символов.

+0

ваше решение хорошее, но оно дает дополнительные пробелы в массиве. Попробуйте 2 + y. Он дает размер массива 3, но там находится только y. Остальные два пустые. –

+1

@Steffan Harris: Вот так расщепляется. Прочтите документацию: http://download.oracle.com/javase/1.5.0/docs/api/java/lang/String.html#split%28java.lang.String%29 * Поэтому конечные пустые строки не включены в результирующий массив. * Обратите внимание, что он не говорит, что * ведущие * пустые строки удаляются. Вам, вероятно, придется удалить их самостоятельно или, альтернативно, не использовать split, вместо этого используйте «Matcher» и напишите регулярное выражение для того, что вы хотите сохранить, вместо того, что вы хотите отменить. –

+0

Да, мое решение имеет ту же «проблему» - ведущий «разделитель» обрабатывается так, как будто перед ним есть пустой токен. – Alnitak

1

Я думаю, что это то, что вы после:

String[] tmp = expression.split("[^a-zA-Z]+"); 

, которые должны относиться к отделитель как ничего, что не является последовательностью букв.

Test Run

public class foo { 
    static public void main(String[] args) { 
     String[] res = args[0].split("[^a-zA-Z]+"); 
     for (String r: res) { 
      System.out.println(r); 
     } 
    } 
} 

% javac foo.java 
% java foo x+y+3+5+z 
x 
y 
z 
Смежные вопросы