用正则表达式匹配字符串数组内容 java
matching string array content with regular expression java
我是 java 的新手。我正在尝试使用 java 正则表达式来比较两个包含名称的字符串数组,然后使用嵌套的 for 循环打印出匹配的名称和不匹配的名称。下面是我的代码
public class Main {
public static void main(String[] args) {
// write your code here
String regex;
Pattern pattern;
String stringToBeMatched;
Matcher matcher;
boolean b;
String [] names1 = {"Peter","Harry","Potter","Mary","Jerry"};
String [] names2 = {"Adam","Jerry","Potter","Martin","Chris", "Rose"};
//try a loop with two variables for loop
for (int x=0;x >= names2.length;x++) {
regex = names2[x];
pattern = Pattern.compile(regex);
for(int y = 0; y >= names1.length; y++){
stringToBeMatched = names1[y];
matcher = pattern.matcher(stringToBeMatched);
b = matcher.find();
if (b) {System.out.println(names1[y] +" has a match");}
else{System.out.println(names1[y] +" has no match");}
}
}
}
}
代码执行并 returns 输出 Process finished with exit code 0
而不显示任何 System.out.println()
语句指定的任何消息。伙计们,我做错了什么?
除非我误解了你的意图,否则你不应该在这里使用正则表达式。我的理解是您想比较两个数组的重复元素。
你有你的阵列:
String[] names1 = {"Peter", "Harry", "Potter", "Mary", "Jerry"};
String[] names2 = {"Adam", "Jerry", "Potter", "Martin", "Chris", "Rose"};
方法 1 - 嵌套 for 循环。
for(int i = 0; i < names1.length; i++) {
for(int j = 0; j < names2.length; j++) {
if(names1[i].equals(names2[j])) System.out.println(names1[i] + " is in both arrays.");
}
}
方法 2 - 嵌套的 foreach 循环。
for(String name1 : names1) {
for(String name2 : names2) {
if(name1.equals(name2)) System.out.println(name1 + " is in both arrays.");
}
}
方法 3 - 使用 List.
List<String> names2List = Arrays.asList(names2);
for(String name1 : names1) {
if(names2List.contains(name1)) System.out.println(name1 + " is in both arrays.");
}
方法 4 - 使用 Set. This works because HashSet#add() 不会添加重复项,如果需要,returns false。
Set<String> names2Set = new HashSet<>(Arrays.asList(names2));
for(String name1 : names1) {
if(!names2Set.add(name1)) System.out.println(name1 + " is in both arrays.");
}
方法 5 - 使用 Streams。如果你想变得花哨。
for(String name1 : names1) {
if(Arrays.stream(names2).anyMatch(name1::equals)) System.out.println(name1 + " is in both arrays.");
}
对于 lambda 函数,使用 "distinct" 不打印重复值。
String [] names1 = {"Peter","Harry","Potter","Mary","Jerry"};
String [] names2 = {"Adam","Jerry","Potter","Martin","Chris", "Rose", "Peter", "Peter"};
for (String name1:
names1) {
Arrays.stream(names2).filter(name1::equals).distinct().forEach(System.out::println);
}
我是 java 的新手。我正在尝试使用 java 正则表达式来比较两个包含名称的字符串数组,然后使用嵌套的 for 循环打印出匹配的名称和不匹配的名称。下面是我的代码
public class Main {
public static void main(String[] args) {
// write your code here
String regex;
Pattern pattern;
String stringToBeMatched;
Matcher matcher;
boolean b;
String [] names1 = {"Peter","Harry","Potter","Mary","Jerry"};
String [] names2 = {"Adam","Jerry","Potter","Martin","Chris", "Rose"};
//try a loop with two variables for loop
for (int x=0;x >= names2.length;x++) {
regex = names2[x];
pattern = Pattern.compile(regex);
for(int y = 0; y >= names1.length; y++){
stringToBeMatched = names1[y];
matcher = pattern.matcher(stringToBeMatched);
b = matcher.find();
if (b) {System.out.println(names1[y] +" has a match");}
else{System.out.println(names1[y] +" has no match");}
}
}
}
}
代码执行并 returns 输出 Process finished with exit code 0
而不显示任何 System.out.println()
语句指定的任何消息。伙计们,我做错了什么?
除非我误解了你的意图,否则你不应该在这里使用正则表达式。我的理解是您想比较两个数组的重复元素。
你有你的阵列:
String[] names1 = {"Peter", "Harry", "Potter", "Mary", "Jerry"};
String[] names2 = {"Adam", "Jerry", "Potter", "Martin", "Chris", "Rose"};
方法 1 - 嵌套 for 循环。
for(int i = 0; i < names1.length; i++) {
for(int j = 0; j < names2.length; j++) {
if(names1[i].equals(names2[j])) System.out.println(names1[i] + " is in both arrays.");
}
}
方法 2 - 嵌套的 foreach 循环。
for(String name1 : names1) {
for(String name2 : names2) {
if(name1.equals(name2)) System.out.println(name1 + " is in both arrays.");
}
}
方法 3 - 使用 List.
List<String> names2List = Arrays.asList(names2);
for(String name1 : names1) {
if(names2List.contains(name1)) System.out.println(name1 + " is in both arrays.");
}
方法 4 - 使用 Set. This works because HashSet#add() 不会添加重复项,如果需要,returns false。
Set<String> names2Set = new HashSet<>(Arrays.asList(names2));
for(String name1 : names1) {
if(!names2Set.add(name1)) System.out.println(name1 + " is in both arrays.");
}
方法 5 - 使用 Streams。如果你想变得花哨。
for(String name1 : names1) {
if(Arrays.stream(names2).anyMatch(name1::equals)) System.out.println(name1 + " is in both arrays.");
}
对于 lambda 函数,使用 "distinct" 不打印重复值。
String [] names1 = {"Peter","Harry","Potter","Mary","Jerry"};
String [] names2 = {"Adam","Jerry","Potter","Martin","Chris", "Rose", "Peter", "Peter"};
for (String name1:
names1) {
Arrays.stream(names2).filter(name1::equals).distinct().forEach(System.out::println);
}