我有一个字符串(例如:" foo12"),我想在字母和数字之间添加一个分隔符(例如" foo | 12")。但是,我似乎无法弄清楚在Java中使用适当的代码是什么。我应该使用正则表达式+替换还是我需要使用匹配器?
答案 0 :(得分:4)
正则表达式替换会很好:
String result = subject.replaceAll("(?<=\\p{L})(?=\\p{N})", "|");
这会在字母后面和数字前面(通过使用lookaround assertions)查找位置。如果您只想查找ASCII字母/数字,请使用
String result = subject.replaceAll("(?i)(?<=[a-z])(?=[0-9])", "|");
答案 1 :(得分:0)
拆分字母和数字,并与"|"
连接。这是一个单行:
String x = "foo12";
String result = x.replaceAll("[0-9]", "") + "|" + x.replaceAll("[a-zA-Z]", "");
打印result
将输出:foo|12
答案 2 :(得分:0)
为什么甚至使用正则表达式?这不是很难自己实现:
public static String addDelimiter(String str, char delimiter) {
StringBuilder string = new StringBuilder(str);
boolean isLetter = false;
boolean isNumber = false;
for (int index = 0; index < string.length(); index++) {
isNumber = isNumber(string.charAt(index));
if (isLetter && isNumber) {
//the last char was a letter, and now we have a number
//so here we adjust the stringbuilder
string.insert(index, delimiter);
index++; //We just inserted the delimiter, get past the delimiter
}
isLetter = isLetter(string.charAt(index));
}
return string.toString();
}
public static boolean isLetter(char c) {
return 'A' <= c && c <= 'Z' || 'a' <= c && c <= 'z';
}
public static boolean isNumber(char c) {
return '0' <= c && c <= '9';
}
这比正则表达式的优势在于正则表达式很容易变慢。此外,可以轻松更改isLetter
和isNumber
方法,以允许在不同位置插入分隔符。