2014-02-06 3 views
-1

Для программы Java Мне нужно написать, я поставляется со строкой, которая может содержать любое число следующих слов в любом порядке: char, double, intСинтаксический конкретные слова из строки

Так что может выглядеть как любой из них:

  1. "charintdouble"
  2. "charchar"
  3. "intdoublechardouble"

Затем я хочу сохранить каждое слово в массиве в том порядке, в котором они появляются в строке. Поэтому входная строка из "intdoublechardouble" приведет массив, который выглядит следующим образом:

{"int", "double", "char", "double"} 

Что бы лучший способ разбора строки, чтобы получить все слова из него?

+0

Почему бы не начать с _worst way_, а затем пусть люди принимают вас вперед к _best_? – devnull

+0

Это не так, как работает SO. Сначала вы пытаетесь найти решение, а затем, когда что-то не работает, вы задаете конкретный вопрос. Проводка «вот моя проблема, пожалуйста, скажите мне, как это сделать» считается не по теме в StackOverflow. –

+0

Я не прошу кого-нибудь написать код для меня. Мне просто интересно, что люди думали, что это самый эффективный и простой способ сделать это. Очевидно, худшим способом было бы пропустить каждый символ в строке и посмотреть, соответствует ли текущая последовательность любому из слов, которые я ищу. Благодарим за недовольство за законный вопрос? – arazzy

ответ

0

Вы можете использовать замены и методы сплит веревочки

String str="intdoublechardouble"; 
    str=str.replace("char", "char-").replace("double", "double-").replace("int", "int-"); 
    String[] tokens=str.split("-"); 

Теперь лексемы содержат [int, double, char, double]

+0

В результате я использовал этот метод. Большое спасибо! – arazzy

0

Я бы начал думать о том, как вы можете сделать это в реальной жизни и попробовать превратить это в алгоритм Java. Несколько неэффективным способом будет string.split в строке для каждого элемента в строковом массиве {"char", "int", "double"} и положить все жетоны, созданные string.split в правильном порядке.

0

Если вам необходимо эффективное решение для этой конкретной проблемы, это должно сделать трюк

public Object extractWords(String s) { 

    ArrayList<String> array = new ArrayList<String>(); 

    s = s.replace("t", "t,"); 
    s = s.replace("r", "r,"); 
    s = s.replace("e", "e,"); 

    StringTokenizer tokenizer = new StringTokenizer(s, ","); 
    while (tokenizer.hasMoreTokens()) { 
     array.add(tokenizer.nextToken()); 
    } 
    return array; 
} 

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

Смежные вопросы