簡體   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