Java 11中,我尝试使用正则表达式来构建一个方法,该方法接受String
,转换它,并返回转换后的结果。
具体来说,字符串必须只包含1+个字母数字字符([a-zA-Z0-9]+
),每当两个连续的字符/元素改变大小写或从字母-〉数字切换(反之亦然)时,我希望在它们之间插入一个连字符("-"
)。
因此:
INPUT RESULT
====================================
flimFlam flim-Flam
fliMflam fliM-flam
fliM8fLam fli-M-8-f-Lam
flim$Flam Illegal! $ not allowed!
目前为止我最好的尝试是:
public String hyphenate(String input) {
// validate
String regex = "[a-zA-Z0-9]+";
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(input);
if (!matcher.matches()) {
throw new IllegalArgumentException("Illegal!");
}
// TODO: how to efficiently iterate down the 'input' string and insert hyphen
// whenever case changes or 2 consecutive elements switch from alpha -> numeric
// or numeric -> alpha ?
}
- 关于如何高效地完成此 * 连字符 ,您有什么想法吗?*
2条答案
按热度按时间6rqinv9w1#
使用正则表达式可以尝试:
xienkqul2#
1.您可以使用
[^\\p{Alnum}]
检查非字母数字字符。了解有关documentation模式的更多信息。1.您可以使用
[a-z]+(?=[A-Z\d])|[A-Z]+[a-z]+|\d+|[A-Z]
获取匹配组。从this demo了解有关此模式的更多信息。您可以使用常规循环或Stream API连接匹配组,如以下演示所示。