View Javadoc

1   package org.musicontroller.importer;
2   import java.util.regex.Matcher;
3   import java.util.regex.Pattern;
4   
5   /**
6    * This helper class parses track number strings into
7    * a likely integral value.
8    * "1" is translated into 1.
9    * "1/8" is translated into 1.
10   * If the parser cannot guess a likely track number, it returns 0.
11   * 
12   * @author drexler
13   * @version $Id: TrackNumberParser.java,v 1.1 2010/03/16 18:55:43 varienaja Exp $
14   */
15  public class TrackNumberParser {
16  
17  	/**
18  	 * This helper class parses track number strings into
19  	 * a likely integral value.
20  	 * <ul>
21  	 * <li>"1" is translated into 1.
22  	 * <li>"1/8" is translated into 1.
23  	 * <li> NULL is transated into 0.
24  	 * </ul>
25  	 * If the parser cannot guess a likely track number, it returns 0.
26  	 * 
27  	 * @param trackstring The String representation of the track number
28  	 * @return The guessed integal track number.
29  	 */
30  	public static int parseTrackNumber(String trackstring) {
31  		if (trackstring==null) {
32  			return 0;
33  		}
34  		int tracknr = 0;
35  		try {
36  			tracknr = Integer.parseInt(trackstring);
37  			return tracknr;
38  		} catch (NumberFormatException e) {
39  			// ignore. We will look into this track number in more detail.
40  		}
41  		Pattern p = Pattern.compile("\\s*(\\d+)\\s*/");
42  		Matcher m = p.matcher(trackstring);
43  		if(m.find()) {
44  			String tracknumbergroup = m.group(1);
45  			try {
46  				tracknr = Integer.parseInt(tracknumbergroup);
47  				return tracknr;
48  			} catch (NumberFormatException e) {
49  				// ignore. This should never happen because we matched a 
50  				//         non-zero length of digits.
51  			}			
52  		}
53  		// If you get here, the string cannot be parsed. Return zero.
54  		return tracknr;
55  	}
56  }