StringTokenizer,只取4个中的最后3个元素

时间:2015-04-15 17:32:15

标签: java stringtokenizer

我需要一些帮助来解决我遇到的这个问题。用缓冲读取器读取了一个txt文件并尝试使用StringTokenizer。 我喜欢这个字符串,首先是一些文本,然后是一些数字。我只需要数字,并且想要跳过" Text"。

Test 2 5 1

我的代码:

// Check if the graph contains an cycle
    StringTokenizer st1 = new StringTokenizer(br.readLine());
    Graph.checkForCycle(null, Integer.parseInt(st1.()), Integer.parseInt(st1.nextToken()), Integer.parseInt(st1.nextToken()));      

正如你所看到的,这里有4套,当我调用方法Graph.checkForCycle()

时,我希望最后3个与参数一起发送

希望有人可以提供帮助。

2 个答案:

答案 0 :(得分:1)

你需要扔掉第一个:

StringTokenizer st1 = new StringTokenizer(br.readLine());
st1.nextToken(); // "Text" - do nothing with it
int i1 = Integer.parseInt(st1.nextToken()); // 2
// ...
Graph.checkForCycle(null, i1, i2, i3);      

或者,您可以使用负责转换的扫描仪:

Scanner sc = new Scanner(br.readLine());
sc.next(); // "Text"
int i1 = sc.nextInt();
// ...

答案 1 :(得分:0)

从java 1.5开始,sun(现在是oracle)不鼓励使用StringTokenizer。

所以在StringTokenizer的javadoc中,有人说:

  

StringTokenizer是为保持兼容性而保留的旧类   原因虽然在新代码中不鼓励使用它。建议   任何寻求此功能的人都使用String的split方法   或者改为java.util.regex包。

但是,没有提到您也可以使用Scanner类。

使用String的split方法的示例:

String[] args = br.readLine().split("\\s");  // Split on whitespaces
Graph.checkForCycle(null, args[1], args[2], args[3]);

java.util.Scanner类的示例:

Scanner scanner = new Scanner(br.readLine());
scanner.next();  //skip the first
Graph.checkForCycle(null, scanner.next(), scanner.next(), scanner.next());

这些是简短的例子,不要按原样使用它们。即:如果文本行中的单词数量可能不同,您将需要使用方法“hasNext”。