我正在使用WordsUtils
到capitalize
单词。
由于我无法定义哪些单词应大写,因此我必须在大写功能之后进行另一种实现,以将某些单词小写。
应小写的单词是:["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/