[英]StringTokenizer not making tokens with new lines
我无法让StringTokenizer将几行文本分解成单独的标记。 输入的文字是
3
monkeys
但是,StringTokenizer显然将其解释为“ 3monkeys”。 我需要它是“ 3”和“ monkeys”。 因此,由于我需要将字符串“ 3”转换为整数,因此引发了NumberFormatException。
这是我到目前为止的代码。
Scanner f = new Scanner( new FileInputStream("input.txt" )); // Yes, i have the actual input file path here, but I changed it for this question.
PrintWriter out = new PrintWriter(new BufferedWriter(new FileWriter("output.txt")));
String temp = "";
//String cString = "";
while( f.hasNextLine() ) {
String cString = f.nextLine();
temp += cString;
}
StringTokenizer everythingTokens = new StringTokenizer( temp );
String[] everything = new String[ everythingTokens.countTokens() ];
for( int i = 0; i < everything.length; i++ ) {
everything[ i ] = everythingTokens.nextToken();
}
int numberOfPeople = Integer.parseInt( everything[ 0 ] ); // Line where exception occurs.
out.println( everything[ 0 ] );
错误信息是这个
Exception in thread "main" java.lang.NumberFormatException: For input string: "3monkeys"
at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
at java.lang.Integer.parseInt(Integer.java:492)
at java.lang.Integer.parseInt(Integer.java:527)
at gift1.main(gift1.java:32)
Java Result: 1
为什么会发生这种情况,我该如何解决?
StringTokenizer不使用新行创建令牌
结果String
中没有换行符。 要改变这一点..
String eol = System.getProperty("line.separator");
...
temp += cString + eol;
最终,我将废弃该代码,然后重新开始。
StringBuilder
而不是String +=
String
中呢? 立即对其进行解析,然后忽略为第一行读取的String
。 通过temp += cString
将每行追加到字符串时,您拥有的是“ 3” +“ monkeys”,即“ 3monkeys”。 您可以通过在每行之后添加一个空格来解决此问题; temp += cString + " "
。
发生的情况是,您将3和猴子连接在一起
while( f.hasNextLine() ) {
String cString = f.nextLine();
temp += cString;
}
所以temp现在将包含3个猴子,您将删除换行符
如果您格式化输入文件的格式,使每一行都是一个单独的标记,那么我认为您甚至还不需要标记符,您只需将cString添加到数组中,或者更好地使用ArrayList,这样您就不必介意了数组的大小
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.