Java stringtokenizer分配麻烦

时间:2013-12-22 12:32:41

标签: java stringtokenizer

所以我在使用stringtokenizer构造和方法根据给定的参数返回字符串的第一个或第二个标记时遇到了问题。 EX:“3 + 5”,2。这个回报应该是5。 到目前为止我所拥有的是:

    StringTokenizer st = new StringTokenizer (input, "+-*/%");
      if (st.hasMoreTokens());
    return st.nextToken();

这将返回字符串的第一个标记,但我不确定如何返回第二个标记。有什么建议吗?

4 个答案:

答案 0 :(得分:2)

  if (st.hasMoreTokens());

应该是

  if (st.hasMoreTokens())

还有一个额外的;,您的代码额外;就像写作一样,

if(..)
{

}

 return st.nextToken();

编辑:

此外,您需要形成一个字符串然后返回。不return st.nextToken();终止循环并返回第一个值。

答案 1 :(得分:1)

这会对你有所帮助。要使此程序正常工作,我们需要两个参数 - 输入字符串所需令牌的位置。在下面的程序中,我有硬编码的位置 想要标记为“ 3 ”。因此,输出将是“ 10 ”,因为它是输入字符串的第三个标记 - 3+5*10*12+11

public static void main(String[] args) {
    //input string 
    String input = "3+5*10*12+11";
    // number of token we need
    int wantedToken = 3;
    // token number defaults to '1' and keeps track of the token position
    int i = 1;
    StringTokenizer st = new StringTokenizer(input, "+-*/%");
    while (st.hasMoreTokens()) {
        //when i equals wanted token, print it
        if (i == wantedToken) {
            System.out.println("wanted token : " + st.nextToken());
            break;
        } 
        else {
            //move to next token
            st.nextToken();
            //increment the token position
            i++;
        }
    }

}

输出:

run:
wanted token : 10
BUILD SUCCESSFUL (total time: 0 seconds)

更新:转换上面的代码 - 一个单独的方法。以下代码需要input string and wanted token from user

public class WantedTokenTest {

    public static void main(String[] args) {
          //input string 
        String input = null;
        // number of token we need
        int wantedToken = 1;
        Scanner scr = new Scanner(System.in);
        System.out.println("Please enter the input string : ");
       input =  scr.nextLine();
        System.out.println("Please enter the wanted token : ");
       wantedToken =  scr.nextInt();

        System.out.println(getWantedToken(input, wantedToken));

    }


    private static String getWantedToken(String input,int wantedToken){
           // token number defaults from '1' and keeps track of the token position
        int i = 1;
        StringTokenizer st = new StringTokenizer(input, "+-*/%");
        while (st.hasMoreTokens()) {
            //when i equals wanted token, print it
            if (i == wantedToken) {
               return st.nextToken();

            } 
            else {
                //move to next token
                st.nextToken();
                //increment the token position
                i++;
            }
        }
        return null;
    }
}

希望,它澄清了如何做到这一点

答案 2 :(得分:0)

你可以这样使用 而(st.hasMoreTokens()) {  / ... }

答案 3 :(得分:0)

如果你想用Tokenizer解析数学表达式,你应该以动态方式进行。 您可以查看answer1answer2

但是如果你只想获得第二个令牌,请尝试以下代码:

public static List<String> getTokens(String input) {
    List<String> tokens = new ArrayList<String>();
    StringTokenizer st = new StringTokenizer(input, "+-*/%");
    while (st.hasMoreTokens()) {
        tokens.add(st.nextToken());
    }
    return tokens;
}
public static void main(String[] args) {
    List tokens = getTokens("3+5");
    System.out.println(tokens.get(0));
    System.out.println(tokens.get(1));//the second token
}

OR

public static String[] getTokens (String input) {
    return input.split("[-\\+\\*\\\\]");
}
public static void main(String[] args) {
    String[] tokens = getTokens("3+5");
    System.out.println(tokens[0]);
    System.out.println(tokens[1]);//the second token
}