示例 txt 檔案
ADD 'Cordless Screwdriver' 30 1 2
COST 'Multi Bit Ratcheting'
FIND 'Thermostat'
FIND 'Hand Truck'
SELL 'Hammer' 1
QUANTITY 'Paint Can'
FIRE 'Joshua Filler'
HIRE 'Lewis hamilton' 35 G
PROMOTE 'Lewis hamilton' M
SCHEDULE
代碼
File inputFile = new File("src/edu/iu/c212/resources/input.txt");
String[] inputWords = null;
FileReader inputReader = new FileReader(inputFile);
BufferedReader bri = new BufferedReader(inputReader);
String y;
while ((y = bri.readLine()) != null) {
inputWords = y.split(" ");
--- Project Code That Handles Split Up Lines ---
}
有沒有辦法讓我在跨越線時拆分不拆分撇號內的專案?這樣,無論第一項是一個詞還是兩個詞,如果我呼叫 inputWords[1] 它將始終回傳完整的字串。
會發生什么:“多位棘輪”-> inputWords[1] -> 'Multi
我想要什么:“多位棘輪”-> inputWords[1] -> '多位 Ratheting'
uj5u.com熱心網友回復:
您可以使用以下模式將正則運算式 find all 應用于每一行'.*?'|\S :
String line = "ADD 'Cordless Screwdriver' 30 1 2";
String[] matches = Pattern.compile("'.*?'|\\S ")
.matcher(line)
.results()
.map(MatchResult::group)
.toArray(String[]::new);
System.out.println(Arrays.toString(matches));
// [ADD, 'Cordless Screwdriver', 30, 1, 2]
您可以將上述邏輯應用于檔案中的每一行。但是,您應該在回圈之外定義模式,這樣就不必為每一行重新編譯。
您更新的代碼:
File inputFile = new File("src/edu/iu/c212/resources/input.txt");
FileReader inputReader = new FileReader(inputFile);
BufferedReader bri = new BufferedReader(inputReader);
Pattern r = Pattern.compile("'.*?'|\\S ");
String y;
while ((y = bri.readLine()) != null) {
List<String> items = new ArrayList<>();
Matcher m = r.matcher(y);
while (m.find()) {
items.add(m.group());
}
// use the list here...
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/467301.html
