有这样的字符串:
"\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,然后再次附加拆分。
答案 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 "