我正在尝试在找到以下字符时匹配正则表达式:|<>-
字符串数组中的split("\n");
我的代码如下:
String[] s_array = perged.split("\n");
for (String s_array1 : s_array) {
if (s_array1.matches("(.*)[|><-](.*)")) {
System.out.println("~m~" + s_array1);
} else {
System.out.print("~false~");
System.out.println(s_array1);
}
}
尝试匹配的众多字符串之一是:
<---------^--------->
| HH#...........### | Exits
这些应该匹配,如果我只是复制粘贴字符串,他们将使用我的regexp测试为true。但是,正在解析的实际字符串中包含ANSI颜色代码的\u001B
个字符。我相信这些都是导致问题的原因。因此我尝试(.*)
而不是(\\D*)
,而且仍然没有考虑'.'
可能不接受\ u001B字符。
if (s_array1.matches("(\\D*)[|><-](\\D*)")) {
正在解析的实际字符串如下所示:
[37;1m<[0m[34;1m---------[0m[37;1m^[0m[34;1m---------[0m[37;1m>[0m[34;1m[0m\u000D\u000A
[34;1m| [0m[0m[35mHH[0m[0m[37m#[0m[0m[33m..........[0m[1;32mp[0m[0m[37m###[0m[34;1m |[0m Exits: \u000D\u000A
非常感谢任何帮助。我并不致力于使用匹配,我只是不想做
if(s_array1.contains("<") || s_array1.contains(">") ....
如果存在同类型的未来问题,我更倾向于采用更先进的方式。
修改
我现在尝试使用临时字符串来删除它仍在评估为false
的转义符:
String[] s_array = perged.split("\n");
for (String s_array1 : s_array) {
String temp=s_array1.replaceAll("\u001B", "");
System.out.println(temp);
if (temp.matches("(.*)[|><-](.*)")) {
System.out.println("~m~" + s_array1);
} else {
System.out.print("~false~");
System.out.println(s_array1);
}
}
一个简单的测试是评估为true
所以我不确定是否有一个字符或字节可以强制表达式为false
:
String s="[37;1m<[0m[34;1m---------[0m[37;1m^[0m[34;1m---------[0m[37;1m>[0m[34;1m[0m Loc: [36mDortlewall (Crystite plaza) [m";
if(s.matches("(.*)[|><-](.*)")){
System.out.println("It was true yay!!");
}else
System.out.println("It was false BOOO:");
答案 0 :(得分:0)
我更改了if条件以使用java.util.regex.Pattern
。
String perged = "[37;1m<[0m[34;1m---------[0m[37;1m^[0m[34;1m---------[0m[37;1m>[0m[34;1m[0m Loc: [36mDortlewall (Crystite plaza) [m";
String[] s_array = perged.split("\n");
for (String s_array1 : s_array) {
if (Pattern.matches("(.*)[|><-](.*)" , s_array1)) {
System.out.println("~m~" + s_array1);
} else {
System.out.print("~false~");
System.out.println(s_array1);
}
}
}
打印
~m~[37;1m<[0m[34;1m---------[0m[37;1m^[0m[34;1m---------[0m[37;1m>[0m[34;1m[0m Loc: [36mDortlewall (Crystite plaza) [m
如果在\n
之前碰巧遇到Loc:
,结果将是:
~m~[37;1m<[0m[34;1m---------[0m[37;1m^[0m[34;1m---------[0m[37;1m>[0m[34;1m[0m
~false~Loc: [36mDortlewall (Crystite plaza)