2013-02-15 4 views
0

У меня есть ряд строк, которые выглядят следующим образом (показать некоторые примеры):Расщепление конкретных символов из последовательности в Java

S1+2S2 
S2 
2S3+S4 
S1+S2 

, и я хочу, чтобы извлечь только число видов из этих строк. То есть ТОЛЬКО числа, следующие за символами «S». (? Или извлечения из них) Таким образом, после разделения строк я хотел бы, чтобы это выход:

1 2 
2 
3 4 
1 2 

Является ли это то, что может быть сделано с помощью одного или двух строк в Java? Или это будет многоступенчатая серия циклов, разбивая последовательность один раз, затем снова, затем снова, как я ее сейчас?

Спасибо, ребята!

+0

Вы можете использовать «S +» в качестве разделительной строки для StringTokenizer – stacker

+0

Вам просто нужны номера, следующие за 'S'? – Prince

+0

@ Принц. Это четко указано в вопросе, если вы читаете его четко. –

ответ

1

Это проходит тест:

package com.sandbox; 

import org.junit.Test; 

import static org.junit.Assert.assertEquals; 

public class SandboxTest { 


    @Test 
    public void testInputEqualsOutput() { 
     String input = "S1+2S2\n" + 
       "S2\n" + 
       "2S3+S4\n" + 
       "S1+S2"; 
     String output = processInput(input); 
     assertEquals("1 2\n" + 
       "2\n" + 
       "3 4\n" + 
       "1 2", output); 
    } 

    private String processInput(String input) { 
     return input.replaceAll("\\d?S", "").replaceAll("\\+", " "); 
    } 

} 

Метод processInput заменяет все «S» S, которая может иметь цифру перед ними с «». Затем он заменяет все символы + пробелом.

+0

Это может не сработать. Вы не извлекаете то, что нужно, но вы удаляете все остальное, что не нужно. Теперь эта часть, которая вам не нужна, - это то, чего вы не знаете. Таким образом, вы не получите правильный результат для любой другой строки, которая не соответствует точному формату, указанному в примере. –

+0

ИМО вы критикуете реализацию вместо ее правильности. Как вы знаете, что имеет значение? Он проходит тест. Если у него есть другой вход и ожидаемый выход, это не сработает, я изменю свой тест, чтобы передать это. –

+0

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