regex 捕获组访问的replaceAll的第二个参数中是否有更改字符串的选项

e5nszbig  于 2023-01-10  发布在  其他
关注(0)|答案(2)|浏览(104)

我编写了一个程序,将字符串中用"-"或"_"分隔的单词(word1-word2-word3 ...或word1_word2_word3 ...或它们的任意组合)替换为驼峰式大小写格式:一米二米一
我想这样做:str.replaceAll("[-_]([a-zA-Z0-9])", "$1".toUpperCase());和它的一半排序工作:我得到的结果是:word1word2word3 ... -看起来,toUpperCase()没有任何效果,所以我的问题是:为什么会这样以及如何使其工作-最好使用replaceAll()

  • 样品输入:word1_word2_word3
  • 预期产出:word1Word2Word3
pgx2nnw8

pgx2nnw81#

使用MatcherreplaceAll(Function<MatchResult, String>)方法:

str = Pattern.compile("[-_]([a-zA-Z0-9])")
    .matcher(str)
    .replaceAll(mr -> mr.group(1).toUpperCase());

参见live demo,显示:

String str = "word1_word2-word3";
str = Pattern.compile("[-_]([a-zA-Z0-9])")
    .matcher(str)
    .replaceAll(mr -> mr.group(1).toUpperCase());
System.out.println(str);

输出:

word1Word2Word3
fwzugrvs

fwzugrvs2#

以下是您提到的问题的工作解决方案:

public static void main(String[] args) {

        char[] deliminators = {'-', '_'};
        String input = "word1-word2-word3_word1_word2_word3";
        char[] output = "word1-word2-word3_word1_word2_word3".toCharArray();

        int index = 0;
        for (char element : input.toCharArray()) {

            if (ArrayUtils.contains(deliminators, element)) {
                ArrayUtils.remove(output, index);
                index++;
                output[index] = Character.toUpperCase(output[index]);
                continue;
            }
            index++;
        }
        output[0] = Character.toUpperCase(output[0]);

        String.valueOf(output).replaceAll("-", "").replaceAll("_", "");
        System.out.println(String.valueOf(output).replaceAll("-", "").replaceAll("_", ""));
    }

请承认,它应该直接为您的用例工作。

相关问题