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 }