Why do I need to call find() twice?

Ms8Bdwag

New Member
I am writing a program to parse a bunch of data, (you can get an example of the dataset itself here: https://explore.data.gov/Geography-and-Environment/Worldwide-M1-Earthquakes-Past-7-Days/7tag-iwnu).The following class works perfectly fine, but I am not sure why I need to call \[code\]matcher.find()\[/code\] an extra time between each item in my \[code\]parseEarthquake()\[/code\] method. Why is that? Is that a normal quirk I just have to deal with, or did I set it up my pattern/matcher incorrectly?The method takes a string containing one of the lines of data (for example, \[code\]nc,71958020,1,"Thursday, March 21, 2013 17:13:34 UTC",38.8367,-122.8298,1.4,2.60,28,"Northern California"\[/code\]), and returns an earthquake object for the data.\[code\]import java.text.DecimalFormat;import java.text.FieldPosition;import java.text.ParseException;import java.text.SimpleDateFormat;import java.util.TimeZone;import java.util.regex.Matcher;import java.util.regex.Pattern;public class Earthquake { String src="http://stackoverflow.com/questions/15621831/xx"; String eqid="00000000"; short version; long dateTime; float lat, lon; float mag, dep; short nst; String region="Nowhere"; private Earthquake(){ date.setTimeZone(TimeZone.getTimeZone("UTC")); } private static DecimalFormat coords = new DecimalFormat( "##0.0000" ), magnitude = new DecimalFormat( "###0.0" ), depth = new DecimalFormat( "###0.00" ); private static SimpleDateFormat date = new SimpleDateFormat("'\"'EEEE', 'MMMM' 'dd', 'yyyy' 'HH':'mm':'ss' 'zzz'\"'"); // Src, Eqid, Version, Datetime, Lat, Lon, Magnitude, Depth, NST, Region; public static Earthquake parseEarthquake(String string){ Earthquake result = new Earthquake(); Matcher matcher = Pattern.compile("(\".*?\")|([^,]*)").matcher(string); try { matcher.find(); result.src = http://stackoverflow.com/questions/15621831/matcher.group(); matcher.find(); matcher.find(); result.eqid = matcher.group(); matcher.find(); matcher.find(); result.version = Short.parseShort(matcher.group()); matcher.find(); matcher.find(); result.dateTime = date.parse(matcher.group()).getTime(); matcher.find(); matcher.find(); result.lat = coords.parse(matcher.group()).floatValue(); matcher.find(); matcher.find(); result.lon = coords.parse(matcher.group()).floatValue(); matcher.find(); matcher.find(); result.mag = magnitude.parse(matcher.group()).floatValue(); matcher.find(); matcher.find(); result.dep = depth.parse(matcher.group()).floatValue(); matcher.find(); matcher.find(); result.nst = Short.parseShort(matcher.group()); matcher.find(); matcher.find(); result.region = matcher.group(); } catch (ParseException e) { e.printStackTrace(); } catch (NumberFormatException e) { e.printStackTrace(); } return result; } public String toString(){ StringBuffer buf = new StringBuffer(); buf.append(src); buf.append(','); buf.append(eqid); buf.append(','); buf.append(version); buf.append(','); date.format(dateTime, buf, new FieldPosition(0)); buf.append(','); coords.format(lat, buf, new FieldPosition(0)); buf.append(','); coords.format(lon, buf, new FieldPosition(0)); buf.append(','); magnitude.format(mag, buf, new FieldPosition(0)); buf.append(','); depth.format(dep, buf, new FieldPosition(0)); buf.append(','); buf.append(nst); buf.append(','); buf.append('"'); buf.append(region); buf.append('"'); return buf.toString(); }}\[/code\]
 
Back
Top