我正在撰寫一個程式,我從用戶使用掃描儀輸入的檔案名中讀取資料。我正在使用以下代碼從檔案的每一行創建一個新物件:
while (scan.hasNextLine()) {
String line = scan.nextLine();
String[] parts = line.split(" ");
//create new object from parts here
}
這可以正常作業,直到我的 .txt 檔案在行之間沒有空格但是當單詞之間有空白行時它完全停止作業。
現在它只適用于這樣設定的 .txt 檔案:
line 1
line 2
line 3
我想將其設定為讀取這樣的檔案:
line 1
line 2
line 3
如何修改我的程式以讀取空行并檢查其后是否有文本?
uj5u.com熱心網友回復:
您可以測驗您的部件陣列中的第一個值,該值將始終存在。
while (scan.hasNextLine()) {
String line = scan.nextLine();
String[] parts = line.split(" ");
if (!parts[0].isEmpty()) {
//create new object from parts here
}
}
uj5u.com熱心網友回復:
您可以使用自定義分隔符并呼叫hasNext()and next()。
我添加了一個靜態決議方法,它獲取當前行,拆分它,然后呼叫 POJO 建構式。
App.java
import java.io.*;
import java.util.*;
public class App {
private static class Pojo {
private String text;
private int number;
protected Pojo(String text, int number) {
this.text = text;
this.number = number;
}
public String toString() {
return String.format("{ \"text\": \"%s\", \"number\": %d }", text, number);
}
}
private static Pojo parseLine(String line) {
String[] parts = line.trim().split(" ");
return new Pojo(parts[0], Integer.parseInt(parts[1]));
}
public static void main(String[] args) {
ClassLoader classLoader = App.class.getClassLoader();
InputStream inputStream = classLoader.getResourceAsStream("resources/data.txt");
Scanner scan = new Scanner(inputStream).useDelimiter("\\n(\\s*\\n)?");
while (scan.hasNext()) {
Pojo pojo = parseLine(scan.next());
System.out.println(pojo);
}
scan.close();
}
}
resources/data.txt
line 1
line 2
line 3
輸出
{ "text": "line", "number": 1 }
{ "text": "line", "number": 2 }
{ "text": "line", "number": 3 }
uj5u.com熱心網友回復:
嘗試StringUtils從 apache 安裝庫并使用StringUtils.isBlank(line)它回傳布林值的方法:如果字串為空或只有空格,則為 true;如果字串不為空,則為 false。
否則,您可以進行手動檢查:
if (line != null || line.equals("") || line.equals(" "))
continue;
如果實際行是空的,這將跳到下一行。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/434495.html
標籤:爪哇
上一篇:javalambda函式是否唯一(不同的hashCode和不等于)?
下一篇:執行緒“AWT-EventQueue-0”中的Java例外java.lang.NumberFormatException:對于輸入字串:“”
