[英]Add separator in string using regex in Java
我有一個字符串(例如:“ foo12”),我想在字母和數字之間添加一個定界字符(例如“ foo | 12”)。 但是,我似乎無法弄清楚在Java中執行此操作的適當代碼。 我應該使用正則表達式+替換還是需要使用匹配器?
正則表達式替換就好了:
String result = subject.replaceAll("(?<=\\p{L})(?=\\p{N})", "|");
這會在字母之后和數字之前尋找位置(通過使用環視斷言 )。 如果只想查找ASCII字母/數字,請使用
String result = subject.replaceAll("(?i)(?<=[a-z])(?=[0-9])", "|");
拆分字母和數字並以"|"
串聯 。 這里是單線:
String x = "foo12";
String result = x.replaceAll("[0-9]", "") + "|" + x.replaceAll("[a-zA-Z]", "");
打印result
將輸出: foo|12
為什么還要使用正則表達式? 自己實現並不難:
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
方法以允許在不同位置插入定界符。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.