簡體   English   中英

在Java中使用正則表達式在字符串中添加分隔符

[英]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';
}

與正則表達式相比,此方法的優勢在於正則表達式很容易變慢。 另外,很容易更改isLetterisNumber方法以允許在不同位置插入定界符。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM