2012-05-14 4 views
2

У меня возникла проблема, связанная с разбиением жала на основе скобок. У меня есть строка, как этот Fe (C5H5) 2FeO3 и мне нужно разделить жало в массив, так что массив считываетразделит строку на основе скобок и следующего символа

Fe

(C5H5) 2

FeO3

Я использую этот код.

String form = "Fe(C5H5)2FeO3"; 
from.split([()]+); 

У меня возникли проблемы с получением символа после «)», чтобы разделить. Это также должно работать для нескольких наборов() в одной строке.

Благодаря

+0

Можете уточнить, на какие результаты вы пытаетесь улучшить свою эффективность? Изменить: Хорошо, я вижу больше, но почему 2 с средней группой, а не с концом? Это не расщепление на круглые скобки. Кроме того, посмотрели ли вы на регулярное выражение и посмотрели? –

+0

Очевидно, OP хочет анализировать химические формулы. – mellamokb

+0

Да, но теперь это не разделение на скобки. –

ответ

3

положительный взгляд вперед и смотреть за может сделать некоторые из этого:

String formula = "Fe(C5H5)2FeO3";  
String regex = "(?=\\()|(?<=\\)\\d)"; 
String[] tokens = formula.split(regex); 
System.out.println(Arrays.toString(tokens)); 

Более подробно об этом, проверьте regular expressions tutorial

+1

Просто, когда я писал свой комментарий, молодец! : D Но я думаю, что вы можете сделать это без каких-либо поисков. – m0skit0

+1

@ m0skit: спасибо! –

1

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

import java.util.*; 
import java.util.regex.*; 
import java.lang.*; 

class Main { 
    public static void main (String[] args) throws java.lang.Exception 
    { 
      String formula = "Fe(C5H5)2FeO3"; 
      Pattern p = Pattern.compile("[^(]+|[(][^)]*[)]\\d+"); 
      Matcher m = p.matcher(formula); 
      while (m.find()) { 
        System.out.println(m.group()); 
      } 
    } 
} 

Эта программа produces Выходной сигнал ниже:

Fe 
(C5H5)2 
FeO3 
Смежные вопросы