使用Java中的regex在字符串中添加分隔符

时间:2014-09-25 19:43:17

标签: java regex

我有一个字符串(例如:" foo12"),我想在字母和数字之间添加一个分隔符(例如" foo | 12")。但是,我似乎无法弄清楚在Java中使用适当的代码是什么。我应该使用正则表达式+替换还是我需要使用匹配器?

3 个答案:

答案 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';
}

这比正则表达式的优势在于正则表达式很容易变慢。此外,可以轻松更改isLetterisNumber方法,以允许在不同位置插入分隔符。