Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/389.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java正则表达式:需要更简单的解决方案_Java_Regex_Replaceall - Fatal编程技术网

Java正则表达式:需要更简单的解决方案

Java正则表达式:需要更简单的解决方案,java,regex,replaceall,Java,Regex,Replaceall,我不熟悉正则表达式。我有一个名为encryptId(不包含|)的字符串,我想使用Java中的encryptId.replace/replaceAll(Regex,Pattern)函数,在该字符串的每20个字符后附加字符。但是它不应该在字符串的末尾有\ String s = "..."; //your string int i = 0; StringBuilder res = new StringBuilder(""); for (char c : s.toChar

我不熟悉正则表达式。我有一个名为
encryptId
(不包含
|
)的字符串,我想使用Java中的
encryptId.replace/replaceAll(Regex,Pattern)
函数,在该字符串的每20个字符后附加
字符。但是它不应该在字符串的末尾有
\

    String s = "..."; //your string
    int i = 0;
    StringBuilder res = new StringBuilder("");
    for (char c : s.toCharArray()){
        res.append(c);
        i++;
        if (i % 20 == 0 && i != s.length()){
            res.append("|");
        }
    }
    System.out.println(res.toString());
谢谢你的帮助

    String s = "..."; //your string
    int i = 0;
    StringBuilder res = new StringBuilder("");
    for (char c : s.toCharArray()){
        res.append(c);
        i++;
        if (i % 20 == 0 && i != s.length()){
            res.append("|");
        }
    }
    System.out.println(res.toString());
编辑:

    String s = "..."; //your string
    int i = 0;
    StringBuilder res = new StringBuilder("");
    for (char c : s.toCharArray()){
        res.append(c);
        i++;
        if (i % 20 == 0 && i != s.length()){
            res.append("|");
        }
    }
    System.out.println(res.toString());
  • 我之所以想使用
    replace
    replaceAll
    函数,特别是因为我必须在中使用它。在那里,我们可以使用普通的字符串函数,但不能编写完整的java代码

  •     String s = "..."; //your string
        int i = 0;
        StringBuilder res = new StringBuilder("");
        for (char c : s.toCharArray()){
            res.append(c);
            i++;
            if (i % 20 == 0 && i != s.length()){
                res.append("|");
            }
        }
        System.out.println(res.toString());
    
  • 我当前的解决方案如下所示

  •     String s = "..."; //your string
        int i = 0;
        StringBuilder res = new StringBuilder("");
        for (char c : s.toCharArray()){
            res.append(c);
            i++;
            if (i % 20 == 0 && i != s.length()){
                res.append("|");
            }
        }
        System.out.println(res.toString());
    
    我需要去掉这个
    if
    语句,这样它就只是一个字符串函数。

    您可以使用:

        String s = "..."; //your string
        int i = 0;
        StringBuilder res = new StringBuilder("");
        for (char c : s.toCharArray()){
            res.append(c);
            i++;
            if (i % 20 == 0 && i != s.length()){
                res.append("|");
            }
        }
        System.out.println(res.toString());
    

    res
    将使您的第一个
    字符串每20个字符有一个
    ,但不在
    字符串的末尾

    您问如何使用
    replaceAll
    :我说不要。正则表达式并不总是解决字符串操作问题的最佳方法

        String s = "..."; //your string
        int i = 0;
        StringBuilder res = new StringBuilder("");
        for (char c : s.toCharArray()){
            res.append(c);
            i++;
            if (i % 20 == 0 && i != s.length()){
                res.append("|");
            }
        }
        System.out.println(res.toString());
    
    通过从
    encryptId
    中获取20个字符块并将其附加到
    StringBuilder
    ,可以有效地构建新字符串,如果管道不在字符串末尾,可以选择附加管道:

        String s = "..."; //your string
        int i = 0;
        StringBuilder res = new StringBuilder("");
        for (char c : s.toCharArray()){
            res.append(c);
            i++;
            if (i % 20 == 0 && i != s.length()){
                res.append("|");
            }
        }
        System.out.println(res.toString());
    
    String method(String encryptId) {
      StringBuilder sb = new StringBuilder(encryptId.length() + encryptId.length() / 20);
      for (int i = 0; i < encryptId.length(); i += 20) {
        int end = Math.min(i + 20, encryptId.length());
        sb.append(encryptId, i, end);
        if (end != encryptId.length()) {
          sb.append('|');
        }
      }
      return sb.toString();
    }
    
    字符串方法(字符串加密ID){
    StringBuilder sb=新的StringBuilder(encryptId.length()+encryptId.length()/20);
    对于(int i=0;i
    正则表达式可能会使事情更加复杂。您也可以尝试使用
    StringBuilder
    来执行以下操作:

        String s = "..."; //your string
        int i = 0;
        StringBuilder res = new StringBuilder("");
        for (char c : s.toCharArray()){
            res.append(c);
            i++;
            if (i % 20 == 0 && i != s.length()){
                res.append("|");
            }
        }
        System.out.println(res.toString());
    
            String encryptId = "test";
            StringBuilder builder = new StringBuilder(encryptId);
    
            int insertAfter = 20;
            for(int i = encryptId.length(); i > 0 ; i--) {
                if (i % insertAfter == 0 && i != encryptId.length()) {
                    builder.insert(i, "|");
                }
            }
    

    这可以通过如下正则表达式实现

        String s = "..."; //your string
        int i = 0;
        StringBuilder res = new StringBuilder("");
        for (char c : s.toCharArray()){
            res.append(c);
            i++;
            if (i % 20 == 0 && i != s.length()){
                res.append("|");
            }
        }
        System.out.println(res.toString());
    
    static String enterADelimiter(String str, String delimiter, int after) {
            String regex = "(.{" + after +"})(?!$)";
            String replacement = "$1" + delimiter;
    
            return str.replaceAll(regex, replacement);
        }
    
    只用

        String s = "..."; //your string
        int i = 0;
        StringBuilder res = new StringBuilder("");
        for (char c : s.toCharArray()){
            res.append(c);
            i++;
            if (i % 20 == 0 && i != s.length()){
                res.append("|");
            }
        }
        System.out.println(res.toString());
    
    enterADelimiter(yourString, "|", 20)
    
    这将返回正确的解决方案。解释

        String s = "..."; //your string
        int i = 0;
        StringBuilder res = new StringBuilder("");
        for (char c : s.toCharArray()){
            res.append(c);
            i++;
            if (i % 20 == 0 && i != s.length()){
                res.append("|");
            }
        }
        System.out.println(res.toString());
    
    (            Start group 1
      .          Match Anything
      {after}    after times
    )            End group 1
    (?!$)        Don't match if at end of String 
    

    为什么要特别使用
    replace
    replaceAll
    ?我认为使用
    StringBuilder
    会容易得多。需要更简单的解决方案吗?向我们展示您当前的解决方案。@PhilippSander,我在编辑中指定了该解决方案。@ArunBhati第二部分有什么问题?问题是您不能使用子字符串还是不能使用字符?@PaulBoddington,我只是认为从正则表达式本身我们可以删除if语句。这不会编译,在更正错误后,
    |
    可以位于字符串的末尾。@PaulBoddington已修复。谢谢。这是最有效的解决方案。请注意,在<代码> StringBuilder < /COD>中间插入一个字符是二次的,因为它涉及转移所有以下字符。请注意,您希望避免在循环中连接字符串,因为它会创建中间字符串。将字符附加到
    StringBuilder
    @AndyTurner更有效。我不确定编译器是否会对此进行优化并在引擎盖下使用StringBuilder。谢谢@Aseem,它成功了。“我对你的答案投了赞成票,但看不见。”海盗杰克再试一次。这一次可能有效:D.如果有效,你可以接受答案。记号。哦!因为我没有足够的声誉,所以在我得到足够的声誉之前,它不会被显示出来。@Pirate_Jack我完全忘记了有这个限制。但你应该能够接受。请参阅以了解如何使用。