001package edu.pdx.cs410J.phonebillweb; 002 003import edu.pdx.cs410J.ParserException; 004 005import java.io.BufferedReader; 006import java.io.IOException; 007import java.io.Reader; 008import java.util.HashMap; 009import java.util.Map; 010import java.util.regex.Matcher; 011import java.util.regex.Pattern; 012 013public class TextParser { 014 private final Reader reader; 015 016 public TextParser(Reader reader) { 017 this.reader = reader; 018 } 019 020 public Map<String, String> parse() throws ParserException { 021 Pattern pattern = Pattern.compile("(.*) : (.*)"); 022 023 Map<String, String> map = new HashMap<>(); 024 025 try ( 026 BufferedReader br = new BufferedReader(this.reader) 027 ) { 028 029 for (String line = br.readLine(); line != null; line = br.readLine()) { 030 Matcher matcher = pattern.matcher(line); 031 if (!matcher.find()) { 032 throw new ParserException("Unexpected text: " + line); 033 } 034 035 String word = matcher.group(1); 036 String definition = matcher.group(2); 037 038 map.put(word, definition); 039 } 040 041 } catch (IOException e) { 042 throw new ParserException("While parsing dictionary", e); 043 } 044 045 return map; 046 } 047}