我有一个字符串:
String line = "9.99\t8.29\tAB=0.0;CD=0.0;EF=0.0;GH=0.0;LI=0.0;JK=0.0";
我有一份标签清单:
String[] labels = new String[] {"AB","EF","LI","JK"};
标签匹配意味着它匹配以下模式"\\b"+label+"="
我需要找出除了列表中的标签之外是否还有其他标签。请注意,标签名称的长度不总是2个字符,应该是一个或多个字符[a-zA-Z]+
。
在上面的例子中,标签列表中指定标签以外的标签是:" CD"和" GH"
我不知道标签名称" CD"和" GH"事先,所以不能像这样简单地寻找它们:
Pattern p = Pattern.compile("\\b"+"CD"+"=");
Matcher m = p.matcher(line);
请注意,输出应该是不在列表中的标签的名称,即" CD"和" GH"在上面的例子中
答案 0 :(得分:1)
请试试这个:
public static void main(String[] args) {
String line = "9.99\t8.29\tAB=0.0;CD=0.0;EF=0.0;GH=0.0;LI=0.0;JK=0.0";
String[] labels = new String[]{"AB", "EF", "LI", "JK"};
Pattern p = Pattern.compile("\\b[a-zA-Z]+=");
Matcher m = p.matcher(line);
while (m.find()) {
String groupName = m.group(0).substring(0,m.group(0).length()-1);
if (Arrays.asList(labels).contains(groupName)) {
continue;
} else {
System.out.println(groupName);
}
}
}
它将在找到组后删除最后一个字符(=
),然后检查它是否已存在于您的数组中,如果不存在则将其打印出来。输出是:
CD
GH
答案 1 :(得分:0)
import java.util.Arrays;
import java.util.HashSet;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class testRegex {
public static void main(String[] args)
{
HashSet<String> unseenLabels = new HashSet<String>();
String line = "9.99\t8.29\tAB=0.0;CD=0.0;EF=0.0;GH=0.0;LI=0.0;JK=0.0";
String[] labels = new String[] {".AB=",".EF=",".LI=",".JK="}; //Label with a dot at the beginning to prevent AB= and AAB= getting confused, for example
Pattern p = Pattern.compile("\\b[a-zA-Z]+=");
Matcher m = p.matcher(line);
while (m.find())
{
for(int i=0; i< labels.length; i++) {
if(!Arrays.asList(labels).contains(("." + m.group()))) unseenLabels.add(m.group());
}
}
for(String unseenLabel: unseenLabels) {
System.out.println(unseenLabel.substring(0,unseenLabel.length()-1));
}
}
}
输出:
CD
GH