Игнорировать скобки со строковым токенизатором? - PullRequest
1 голос
/ 23 октября 2010

У меня есть вход, который выглядит следующим образом: (0 0 0)
Я хотел бы игнорировать круглые скобки и добавить только числа, в данном случае 0, к массиву.файл, и это то, что у меня есть до сих пор

    transitionInput = data.nextLine();
    st = new StringTokenizer(transitionInput,"()", true);
    while (st.hasMoreTokens())
    {
        transition.add(st.nextToken(","));
    }

Однако вывод выглядит так [(0 0 0)]
Я бы хотел игнорировать скобки

Ответы [ 4 ]

3 голосов
/ 23 октября 2010

Как насчет

 for(String number: transitionInput
       .replace('(', ' ').replace(')', ' ').split("\\s+")){
    transition.add(number);
 }
2 голосов
/ 23 октября 2010

Сначала вы используете () в качестве разделителей, затем переключаетесь на ,, но вы переключаетесь перед извлечением первого токена (текст в скобках).

Что вы, вероятно, намеревались сделать, это:

transitionInput = data.nextLine();
st = new StringTokenizer(transitionInput,"()", false);
if (st.hasMoreTokens())
{
    String chunk = st.nextToken();
    st = new StringTokenizer(chunk, ",");
    while (st.hasMoreTokens())
    {
        transition.add(st.nextToken());
    }
}

В этом коде предполагается, что выражение всегда начинается и заканчивается скобками. Если это так, вы можете также удалить их вручную, используя String.substring(). Кроме того, вы можете рассмотреть возможность использования String.split() для фактического разделения:

String transitionInput = data.nextLine();
transitionInput = transitionInput.substring(1, transitionInput.length() - 1);
for (String s : transitionInput.split(","))
    transition.add(s);

Обратите внимание, что в обоих примерах предполагается, что в качестве разделителей используются запятые, как в вашем примере кода (хотя в тексте вашего вопроса сказано иное)

0 голосов
/ 23 октября 2010
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.StringTokenizer;


public class simple {


 public static void main(String[] args)
 {

  List transition = new ArrayList();
     String transitionInput="(0 0 0)";
     transition = Arrays.asList((transitionInput.substring(1,transitionInput.length()-1)).split("\\s+"));
     System.out.println(transition);
 }
}
0 голосов
/ 23 октября 2010

Другой вариант

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.StringTokenizer;


public class simple {


 public static void main(String[] args)
 {

  List transition = new ArrayList();
     String transitionInput="(0 0 0)";
     transition = Arrays.asList((transitionInput.substring(1,transitionInput.length()-1)).split("\\s+"));
     System.out.println(transition);
 }
}

Вывод: [0, 0, 0]

...