替换字符串的字符忽略空格直到java中的字符

时间:2015-07-13 14:45:11

标签: java regex string replace split

有这样的字符串:

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

我希望在*字符之前替换任何\ t \ t \ t \ t \ t \ t \ t \ t \ t \ t \ t \ t \ t \ t \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ t \ t <

"   *words aasdasd\t\t \t"

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

3 个答案:

答案 0 :(得分:2)

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

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`

答案 1 :(得分:1)

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

\\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进行替换。

答案 2 :(得分:1)

如果您对非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          "