【问题标题】:How can I remove whitespaces around the first occurrence of specific char?如何删除特定字符第一次出现周围的空格?
【发布时间】:2021-06-06 06:51:12
【问题描述】:

如何删除特定字符前后的空格?我还想仅在特定字符的第一次出现周围删除空格。在下面的示例中,我想删除第一次出现 = 前后的空格。

例如对于那些字符串:

something =           is equal to   =   something
something      =      is equal to   =   something
something      =is equal to   =   something

我需要这个结果:

something=is equal to   =   something

是否有任何正则表达式我可以使用或者我应该检查第一次出现的字符 = 的索引?

【问题讨论】:

    标签: java string char whitespace


    【解决方案1】:
    private String removeLeadingAndTrailingWhitespaceOfFirstEqualsSign(String s1) {
        return s1.replaceFirst("\\s*=\\s*", "=");
    }
    

    请注意,这匹配所有空格,包括制表符和换行符,而不仅仅是空格。

    【讨论】:

      【解决方案2】:

      您可以使用正则表达式\w*\s*=\s* 来获取所有匹配项。从那里调用匹配数组中第一个索引的 trim。

      Regex demo.

      【讨论】:

        【解决方案3】:

        是的 - 您可以创建一个匹配可选空格的正则表达式,然后是您的模式,然后是可选空格,然后替换第一个实例。

        public static String replaceFirst(final String toMatch, final String forIP) {
            // string you want to match before and after
            final String quoted = Pattern.quote(toMatch);
            final Pattern patt = Pattern.compile("\\s*" + quoted + "\\s*");
            final Matcher match = patt.matcher(forIP);
            return match.replaceFirst(toMatch);
        }
        

        对于您的输入,这给出了预期的结果 - 假设 toMatch 是 =。它也适用于任意更大的东西 - 例如......想象给予“等于”而不是......得到

        something =is equal to=   something
        

        对于简单的情况,您可以忽略引用,对于任意情况,它会有所帮助(尽管作为 many contributors have pointed out before Pattern.quoting 并不适用于所有情况)。

        简单的情况就这样变成了

        return forIP.replaceFirst("\\s*" + forIP + "\\s*", forIP);
        

        return forIP.replaceFirst("\\s*=\\s*", "=");
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-07-23
          • 1970-01-01
          • 1970-01-01
          • 2013-12-15
          • 1970-01-01
          • 2019-01-22
          相关资源
          最近更新 更多