【问题标题】:Replace character of string ignoring whitespaces until a character in java替换字符串的字符,忽略空格直到java中的一个字符
【发布时间】:2015-10-01 21:39:03
【问题描述】:

有这样的字符串:

"\t\t\t \t \t *words aasdasd\t\t \t"

我想替换 * 字符之前的任何 \t 忽略它之后的任何 \t 导致:

"   *words aasdasd\t\t \t"

在java中最优雅的方法是什么?我想先在 * 上拆分,然后在第一部分替换 \t,然后再次附加拆分。

【问题讨论】:

  • 我可能会这样做
  • 您在问题中的建议。我不是正则表达式的粉丝。它们的运行速度很快,但除非您对正则表达式语法非常熟悉....下次遇到它们时,您会遇到新问题。
  • 真实故事。是的,我选择它是因为速度和优雅。

标签: java regex string replace split


【解决方案1】:

你可以像这样使用正则表达式:

public static void main(String[] args) {
    String test = "\t\t\t \t \t *words aasdasd\t\t \t";
    test = test.replaceAll("\\t(?=.*?\\*)", "");
    System.out.println("" + test);
}

这将使用前瞻来检查\t 之后是否有*,如果有,它将用"" 替换\t

输出:

`   *words aasdasd\t\t \t`

【讨论】:

    【解决方案2】:

    您可以使用此正则表达式进行搜索:

    \\t(?=[^*]*\\*)
    

    并用空字符串替换。

    在 Java 中:

    String string = "\t\t\t \t \t *words aasdasd\t\t \t";
    string = string.replaceAll("\\t(?=[^*]*\\*)", "");
    System.out.println( string );
    //=>    *words aasdasd\t\t \t
    

    (?=[^*]*\\*) 是一个前瞻,确保有* 后跟\t 进行替换。

    【讨论】:

    • 我得到“无效的转义序列(有效的是 \b \t \n \f \r \" \' \\ )”
    • 还是不行。这对我有用 .replaceAll("\t(?=.*\*)", "");
    • 是的,您也可以使用:string.replaceAll("\\t(?=.*?\\*)", "");,但上面的代码也是直接从 Eclipse 复制/粘贴的。在 Java 正则表达式中,每个转义序列都必须转义两次
    • \t 本身不是一个字符吗?
    【解决方案3】:

    如果您对非regex 方法感兴趣,使用substring()replaceAll()replace() 可以完成您想要的。

    public static void main(String[] args) throws Exception {
        String data = "\t\t\t \t \t *words aasdasd\t\t \t";
        System.out.println("\"Before: " + data + "\"");
    
        String substring = data.substring(0, data.indexOf("*"));
        String newSubstring = substring.replaceAll("\\t", "");
    
        System.out.println("\"After : " + data.replace(substring, newSubstring) + "\"");
    }
    

    结果:

    "Before:                     *words aasdasd         "
    "After :    *words aasdasd          "
    

    【讨论】:

    • 谢谢,这就是我一直在尝试并实现的目标。我想要正则表达式解决方案。
    猜你喜欢
    • 1970-01-01
    • 2019-05-26
    • 1970-01-01
    • 2021-12-04
    • 1970-01-01
    • 2012-07-14
    • 1970-01-01
    • 2013-05-09
    • 1970-01-01
    相关资源
    最近更新 更多