繁体   English   中英

StringTokenizer不使用新行创建令牌

[英]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;

最终,我将废弃该代码,然后重新开始。

  1. 使用StringBuilder而不是String +=
  2. 但是,如果期望第一行是整数,为什么还要将其添加到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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM