我正在使用WordsUtilscapitalize单词。

由于我无法定义哪些单词应大写,因此我必须在大写功能之后进行另一种实现,以将某些单词小写。

应小写的单词是:["da, de, di, do, du, das, des, dis, dos, dus"]

因此,目前我的code是:

public static String capitalize(String word) {
   String newWord = WordUtils.capitalizeFully(word);
   newWord = newWord.replaceAll("\\b([d|D][a-zA-Z]{1,2})\\b", "$1").toLowerCase();
   return newWord;
}



输入示例:


何塞·达斯·希尔瓦
豪尔赫·德·保拉
玛利亚·达斯·普拉斯



问题是replaceAll会将每个单词的小写字母都放入,而不仅仅是与Pattern匹配的介词。

最佳答案

没有第三方库的Java8解决方案:

public static void main(String[] args) {
    String str = "hello mY dEAr friends";
    Set<String> ban = new HashSet<>(Arrays.asList("my", "dear"));
    String result = Arrays.stream(str.split("\\s"))
                          .map(s -> capitalize(s, ban))
                          .collect(Collectors.joining(" "));
    System.out.println(result);
}

static String capitalize(String s, Set<String> ban) {
    String lc = s.toLowerCase();
    return ban.contains(lc) ? lc
                            : Character.toUpperCase(s.charAt(0)) + s.substring(1).toLowerCase();
}

关于java - Java中的ReplaceAll,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35828592/

10-11 10:52