Oar
简写CO,一氧化碳,
CO可以理解为共同协作的意思。
Cyber网络的,电脑的
Oar
船桨
Cyber
Oar寓意在计算机网络世界共同划桨前行
public class MyClass {private String name
private List<String> groups
private Map<String, String> students
public MyClass(String name) {
this.name = name
init()
}
public void init() {
groups = new ArrayList<String>()
groups.add("A组")
groups.add("B组")
groups.add("C组")
students = new HashMap<String, String>()
students.put("a",groups.get(0))
students.put("b",groups.get(0))
students.put("c",groups.get(1))
students.put("d",groups.get(1))
students.put("f",groups.get(2))
}
public void show(){
for (int i = 0 i < groups.size() i++) {
searchByGroup(groups.get(i))
}
}
public void searchByGroup(String groupName){
for (Map.Entry<String, String> e : students.entrySet()) {
if (e.getValue().equalsIgnoreCase(groupName)) {
System.out.println("班级:" + name + " 小组:" + groupName + " 姓名:" + e.getKey())
}
}
}
public void searchByStudent(String studentName) {
System.out.println("班级:" + name + " 小组:" + students.get(studentName) + " 姓名:" + studentName)
}
public static void main(String[] args) {
MyClass g = new MyClass("一班")
g.show()
}
}
//由于得干活去了,那些输出的格式你就自己改吧
1. 捕获组及其编号:1) 捕获组之前讲过,就是匹配到的内容,按照()子表达式划分成若干组;
2) 例如正则表达式:(ab)(cd(ef))就有三个捕获组,没出现一对()就是一个捕获组
3) 捕获组编号规则:
i. 引擎会对捕获组进行编号,编号规则是左括号(从左到右出现的顺序,从1开始编号;
ii. 例如:
2. 反向引用:
1) 捕获组的作用就是为了可以在正则表达式内部或者外部(Java方法)引用它;
2) 如何引用?当然是通过前面讲的用捕获组的编号来引用咯!
3) 正则表达式内部引用:
i. \X:X是一个十进制数,X的范围必须落在捕获组编号范围之内,该表达式就匹配X号捕获组所匹配到的内容;
ii. 从上面的描述可以看出,\X匹配的内容是必须X号捕获组匹配成功之后才能确定的!
iii. 例如:([ab])\1,匹配aabbcc的结果是aa和bb,\1的内容必须要让1号捕获组捕获后才能确定,如果1号捕获的是a那么\1就是a,1号捕获到了b那么\1就是b;
4) 正则表达式外部引用:就是用Matcher对象的start、end、group查询匹配信息时,使用捕获组编号对捕获组引用(int group);
3. 捕获组命名:
1) 如果捕获组的数量非常多,那都用数字进行编号并引用将会非常混乱,并且难以记忆每个捕获组的内容及意义,因此对捕获组命名显得尤为重要;
2) Java 7开始提供了对捕获组命名的语法,并且可以通过捕获组的名称对捕获组反向引用(内外都行);
i. 命名捕获组的语法格式:(?<自定义名>expr)
ii. 例如:(?<year>\d{4})-(?<date>\d{2}-(?<day>\d{2}))
a. 有三个命名捕获组year、date和day
b. 从左到右编号分别为1、2、3(编号同样是有效的)
3) 命名捕获组的反向引用:
i. 正则表达式内引用:\k<捕获组名称>
!例如:(?<year>\d{4})-\k<year>可以匹配1999-1999
ii. 外部引用:Matcher对象的start、end、group的String name参数指定要查询的捕获组的名称;