如果您的目标字符串由数字后跟来自A-F 或a-f 的单个字母组成,一个简单的解决方案可以是:替换正则表达式匹配,(\\d+)([A-Fa-f])。这个正则表达式表示group(1) 由数字组成,group(2) 由来自A-F 或a-f 的字母组成。正则表达式可以替换为$1:$2,其中$1 和$2 分别指定group(1) 和group(2)。
import java.util.Arrays;
public class Main {
public static void main(String[] args) {
// Test strings
String[] arr = { "10584f", "12345A", "13456b", "23456F" };
for (int i = 0; i < arr.length; i++) {
arr[i] = arr[i].replaceAll("(\\d+)([A-Fa-f])", "$1:$2");
}
// After replacement
System.out.println(Arrays.toString(arr));
}
}
输出:
[10584:f, 12345:A, 13456:b, 23456:F]
但是,如果字符串可以有多个字母后跟数字,并且您希望每个字母都以 : 开头,则可以从索引 1 开始迭代字符串,直到字符串的最后一个字符和如果您遇到一封信,请在其前面加上 :,就像函数中所做的那样,withColonBeforeLetters 如下所示:
演示:
import java.util.Arrays;
public class Main {
public static void main(String[] args) {
// Test strings
String[] arr = { "10584f", "12345A", "13456b", "23456F", "1abc", "123aBc" };
for (int i = 0; i < arr.length; i++) {
arr[i] = withColonBeforeLetters(arr[i]);
}
// After replacement
System.out.println(Arrays.toString(arr));
}
static String withColonBeforeLetters(String s) {
StringBuilder sb = new StringBuilder();
// Put the first letter into sb
sb.append(s.charAt(0));
for (int i = 1; i < s.length(); i++) {
char ch = s.charAt(i);
if ((ch >= 'A' && ch <= 'F') || (ch >= 'a' && ch <= 'f')) {
sb.append(':').append(ch);
} else {
sb.append(ch);
}
}
return sb.toString();
}
}
输出:
[10584:f, 12345:A, 13456:b, 23456:F, 1:a:b:c, 123:a:B:c]