Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import java.util.ArrayList;
- import java.util.List;
- public class App {
- public final char S = '(';
- public final char E = ')';
- public final char X = '\\';
- /**
- * Actual Output:
- * Groups: [(//), (\d{1,2}), (\d{1,2}), (\d{2,4})]
- * Expected Output:
- * Groups: [\\b((\\d{1,2})/(\\d{1,2})/(\\d{2,4}))\\b, ((\\d{1,2})/(\\d{1,2})/(\\d{2,4})), (\d{1,2}), (\d{1,2}), (\d{2,4})]
- */
- public App() {
- String expression = "\\b((\\d{1,2})/(\\d{1,2})/(\\d{2,4}))\\b";
- List<String> groups = findGroups(expression);
- System.out.println("Groups: " + groups);
- }
- public List<String> findGroups(String expression) {
- List<String> groups = new ArrayList<>();
- int[] pos;
- int start;
- int end;
- String sub;
- boolean done = false;
- while (expression.length() > 0 && !done) {
- pos = scanString(expression);
- start = pos[0];
- end = pos[1];
- if (start == -1 || end == -1) {
- done = true;
- continue;
- }
- sub = expression.substring(start, end);
- expression = splice(expression, start, end);
- groups.add(0, sub);
- }
- return groups;
- }
- public String splice(String str, int start, int end) {
- String first = str.substring(0, start);
- String last = str.substring(end, str.length());
- return first + last;
- }
- public int[] scanString(String str) {
- int[] range = new int[] { -1, -1 };
- int min = 0;
- int max = str.length() - 1;
- int start = min;
- int end = max;
- char curr;
- while (start <= max) {
- curr = str.charAt(start);
- if (curr == S) {
- range[0] = start;
- }
- start++;
- }
- end = range[0];
- while (end > -1 && end <= max) {
- curr = str.charAt(end);
- if (curr == E) {
- range[1] = end + 1;
- break;
- }
- end++;
- }
- return range;
- }
- /**
- * @param args
- */
- public static void main(String[] args) {
- new App();
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement