标记似乎包括新标记符后面的标记中的分隔符

时间:2013-12-30 21:48:37

标签: java java.util.scanner tokenize delimiter

有问题的程序是一个电话簿应用程序,它采用格式化的用户输入(例如ADD SampleName;SamplePhoneNumber;SampleCategory)。

这个方法应该把它分成四个String s:

  • 命令“ADD”
  • 其他3个代币中的每一个。

第一个分隔符是空格,另外两个是;。当我使用以下代码时,由于某种原因,包含空格作为SampleName的前缀。我不知道为什么会这样,或者如何以实际的方式纠正这个问题。我习惯了C ++,而我只是在学习Java。任何建议都表示赞赏。

以下是方法:

public static Vector tokenize(String com)
{
   Scanner scanner = new Scanner(com);

Vector vs = new Vector();
String s;

while(scanner.hasNext())
{
    if(vs.size()==0)
    {
                scanner.useDelimiter("\\p{javaWhitespace}+");
                s = scanner.next();  // Sets the first delimiter to ' '
                scanner.useDelimiter("[;]");
    }
    else
    {
                scanner.useDelimiter("[;]");
                s = scanner.next();  // Sets all other delimiters as ';'
    }
    vs.add(s);  //  Adds the string s to the vector of strings vs
}

return vs;
}

2 个答案:

答案 0 :(得分:1)

一旦切换分隔符,似乎保留了额外的空格。您可以通过使用相同的分隔符轻松解决此问题:

public static Vector tokenize(final String com) {
    Scanner scanner = new Scanner(com);
    scanner.useDelimiter("[;\\p{javaWhitespace}]+");
    Vector vs = new Vector();
    while (scanner.hasNext()) {
        vs.add(scanner.next()); // Adds the string to the vector of strings vs
    }
    return vs;
}

答案 1 :(得分:0)

或者

public static Vector tokenize(final String com) {
    String[] tokens = com.split(" |;");
    Vector<String> vs = new Vector<String>(tokens.length);
    for (String s : tokens) {
            vs.add(s);
    }
    return vs;
}