我正在按照以下標準進行練習:
“輸入由成對的標記組成,其中每對以該人購買的機票型別(“教練”、“頭等艙”或“折扣”,區分大小寫)開頭,然后是航班的里程數。 ”
該串列可以配對--coach 1500 firstclass 2000 discount 900 coach 3500
目前效果很好。但是,當 String 和 int 值像這樣拆分時:
firstclass 5000 coach 1500 coach
100 firstclass
2000 discount 300
它完全破裂。我幾乎可以肯定它與我使用這種格式有關(不完整)
while(fileScanner.hasNextLine())
{
StringTokenizer token = new StringTokenizer(fileScanner.nextLine(), " ")
while(token.hasMoreTokens())
{
String ticketClass = token.nextToken().toLowerCase();
int count = Integer.parseInt(token.nextToken());
...
}
}
因為它總是將第一個值讀取為字串,將第二個值讀取為整數。在閱讀下一行時,我對如何跟蹤其中一個非常迷茫。任何幫助都非常感謝。
類似(我認為)的問題:
- 在 Java 中高效地讀取/寫入鍵/值對到檔案
- Java-從檔案中讀取大數對并用鏈表表示,得到每一對的和和乘積
- 從檔案中讀取多行中的多個值(Java)
uj5u.com熱心網友回復:
如果您有能力一次性閱讀很長的文本檔案String
,只需使用內置String.split()
的正則運算式\s
,就像這樣
String[] tokens = fileAsString.split("\s ");
這會將輸入檔案拆分為標記,假設標記由一個或多個空格字符分隔(空格字符涵蓋換行符、空格、制表符和回車符)。偶數和奇數代幣分別是票種和里程數。
如果您絕對必須逐行閱讀并使用StringTokenizer
,則解決方案是計算最后一行中的標記數。如果這個數字是奇數,則當前行中的第一個標記將與最后一行中的第一個標記的型別不同。一旦知道當前行的起始型別,只需從那里交替型別即可。
int tokenCount = 0;
boolean startingType = true; // true for String, false for integer
boolean currentType;
while(fileScanner.hasNextLine())
{
StringTokenizer token = new StringTokenizer(fileScanner.nextLine(), " ");
startingType = startingType ^ (tokenCount % 2 == 1); // if tokenCount is odd, the XOR ^ operator will flip the starting type of this line
tokenCount = 0;
while(token.hasMoreTokens())
{
tokenCount ;
currentType = startingType ^ (tokenCount % 2 == 0); // alternating between types in current line
if (currentType) {
String ticketClass = token.nextToken().toLowerCase();
// do something with ticketClass here
} else {
int mileCount = Integer.parseInt(token.nextToken());
// do something with mileCount here
}
...
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/470908.html