【问题标题】:Splitting Java string by Alpha and numerics按字母和数字拆分Java字符串
【发布时间】:2018-01-25 18:47:02
【问题描述】:

我有一组变量,我想根据字符串中的字母字符和数字字符来拆分它们。

String strPolNuber= AFR123456;

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

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

String strUpdatedString=AFR#123456;

有人可以帮忙吗?

【问题讨论】:

    标签: java string split


    【解决方案1】:

    所以你想把# 放在前面有字母字符和后面有数字的地方。您可以在 regex look-around mechanisms 的帮助下做到这一点。

    实现它的代码看起来像

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

    【讨论】:

    • 这是一个很好的答案,我希望能够投票两次。
    【解决方案2】:

    正则表达式替换怎么样: strPolNuber.replaceAll("([a-zA-Z]+)", "$1#")

    如果字符串遵循如此严格的结构,这应该可以工作。它是如何工作的?您将每个字符序列替换为相同的序列,后跟“#”。

    【讨论】:

      【解决方案3】:

      算法解决方案是这样的,

      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();
      }
      

      【讨论】:

        【解决方案4】:

        另一种算法,

        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;
        }
        

        【讨论】:

          猜你喜欢
          • 2015-02-20
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-02-12
          相关资源
          最近更新 更多