i had an assignment where i have to parse certain numbers from a string in this fashion,
if I pass this string to a method the following strings for example:
*I bought 2 books in (2005), They were pretty good, but i didn't like the mention of god in it, 32(1-5), 214-443.
it should print Edition: 32, pages from 214 to 443
*have you read the book published in (2009), named The art of being selfish, look at page, 87, 104-105.
it should print Edition: 87, pages from 104 to 105
*Please take a look here in this link, you will find the, 10(3-4), 259-271.
it should print Edition: 10, pages from 259 to 271
*Someone help me here please in the look for it book, 5(1), 1-4
it should print Edition: 5, pages from 1 to 4
*Help needed (here), 8(4), 325-362.
it should print Edition: 8, pages from 325 to 362
I'm having trouble with the regex formatting since it is required.
solution
what i wrote in my solution
public static void main(String[] args) {
String testString = "Help needed (here), 8(4), 325-362.";
stringParser(testString);
}
static void stringParser(String string) {
List<String> pages = getPages(string);
String edition = getEdition(string);
System.out.println("Edition: " + edition +", pages from " + pages);
}
static List<String> getPages(String string) {
List<String> pages = new ArrayList<>();
Pattern ptr = Pattern.compile(">();(?<=\w[,]\s)[0-9]*");
Matcher match = ptr.matcher(string);
while (match.find()) {
pages.add(match.group());
}
return pages;
}
static String getEdition(String string) {
String edition = "0";
Pattern ptr = Pattern.compile("(?<=(\d|[)])[,]\s)\d.*");
Matcher match = ptr.matcher(string);
if (match.find()) {
edition = match.group();
}
return edition;
}
link to Regex101 with the required sentences https://regex101.com/r/Cw5nG1/1
Advertisement
Answer
I’m not 100% clear on what are you trying to do but here is a crude approach to your problem just until you get a better solution.
getEdition method
static String getEdition(String string) {
var edition = "";
Pattern ptr = Pattern.compile("w+?(?=[(])|d+?(?=[,]s)");
Matcher match = ptr.matcher(string);
while (match.find()) edition = match.group();
return edition;
}
getPages method
static List<String> getPages(String string) {
List<String> pages = new ArrayList<>();
Pattern ptr = Pattern.compile("([0-9]*?)(?:-)([0-9]*?)(?=[.]|$)");
Matcher match = ptr.matcher(string);
if (matcher.find()) {
pages.add(matcher.group(1));
pages.add(matcher.group(2));
}
return pages;
}