aboutsummaryrefslogtreecommitdiff
path: root/src/me/laria/code/idea_caseconv/WordSplitConverter.java
blob: 9b87a259331863876dee7da1b48b33cb9128adb9 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
package me.laria.code.idea_caseconv;

import java.util.ArrayList;
import java.util.List;
import java.util.regex.Pattern;

class WordSplitConverter {
    private static List<String> split(String s) {
        Pattern decamelize = Pattern.compile("(?<![A-Z])[A-Z]");
        s = decamelize.matcher(s).replaceAll(" $0");

        String[] all_parts = s.split("[\\s_-]");
        ArrayList<String> parts = new ArrayList<>();
        for (String p : all_parts) {
            p = p.trim();
            if (!p.equals("")) {
                parts.add(p.toLowerCase());
            }
        }

        return parts;
    }

    public static String convert(String in, String glue, WordTransformer transform) {
        List<String> partsIn = split(in);
        ArrayList<String> partsOut = new ArrayList<>();

        int i = 0;
        for (String part : partsIn) {
            transform.transform(i, part).ifPresent(partsOut::add);
            i++;
        }

        return String.join(glue, partsOut);
    }
}