Ignore parentheses with string tokenizer?
I have an input that looks like: (0 0 0)
transitionInput = d开发者_运维问答ata.nextLine();
st = new StringTokenizer(transitionInput,"()", true);
while (st.hasMoreTokens())
{
transition.add(st.nextToken(","));
}
However, the output looks like this [(0 0 0)]
How about
for(String number: transitionInput
.replace('(', ' ').replace(')', ' ').split("\\s+")){
transition.add(number);
}
You are first using ()
as delimiters, then switching to ,
, but you are switching before extracting the first token (the text between parentheses).
What you probably intended to do is this:
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());
}
}
This code assumes that the expression always starts and ends with parentheses. If this is the case, you may as well remove them manually using String.substring()
. Also, you may want to consider using String.split()
to do the actual splitting:
String transitionInput = data.nextLine();
transitionInput = transitionInput.substring(1, transitionInput.length() - 1);
for (String s : transitionInput.split(","))
transition.add(s);
Note that both examples assume that commas are used as separators, as in your sample code (although the text of your question says otherwise)
Another variant
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);
}
}
Output : [0, 0, 0]
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);
}
}
精彩评论