我需要一些帮助来解决我遇到的这个问题。用缓冲读取器读取了一个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个与参数一起发送希望有人可以提供帮助。
答案 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”。