按字母和数字拆分Java字符串

3
我有一组变量,想要根据字符串中的字母和数字将它们分开。
String strPolNuber= AFR123456;

所以,我的所有字符串都将以3-4个字母字符开头,以6-7个数字结尾。

我想将字母和数字分开,并通过在它们之间添加#符号来连接它们。

String strUpdatedString=AFR#123456;

有人可以帮忙吗?

4个回答

11

所以你想把#放在一个字母字符前面和数字字符后面的位置。你可以借助正则表达式的前后查找机制来实现它。

实现它的代码可能如下:

str = str.replaceAll("(?<=[a-zA-Z])(?=\\d)","#");
  • (?<=[a-zA-Z]) 确保匹配位置之前有字母字符,但不会将该字符包含在匹配中。
  • (?=\\d) 确保匹配位置之后有数字字符,数字本身不会被包含在匹配中,因此不会被任何东西“移除”。

这是一个很好的答案,我希望能够点赞两次。 - Dawood ibn Kareem

2

那么正则表达式替换怎么样呢:

strPolNuber.replaceAll("([a-zA-Z]+)", "$1#")

如果字符串遵循这样严格的结构,那么这应该能起作用。它是如何工作的呢?你将每个字符序列替换为同一序列后跟一个“#”。


0
一个算法解决方案可能是这样的:
private String seperateAlphaNum(String in, int n) {
  StringBuffer sb = new StringBuffer();
  boolean notfound = true;
  for (int i=0; i<n; i++) {
    if (notfound && (int)in.charAt(i) < 65) {
      sb.append("#");
      sb.append(in.charAt(i));
      notfound = false;
    } else {
      sb.append(in.charAt(i));
    }
  }
  if (sb.length() == n) sb.append("#");
  return sb.toString();
}

0

另一个算法,

static String split(String s) {
    for (int i = 0; i < s.length() - 1; i++) {
        if (!Character.isLetter(s.charAt(i)))
            return s.substring(0, i) + "#" + s.substring(i, s.length());
    }
    // String doesn't contain numeric part
    return s;
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接