正则表达式:是指一个用来描述或者匹配一系列字符或者语句的规则的字符串
(一个字符 代表一种规则 用来约束其他字符)
常用规则:
. 任何字符(与行结束符可能匹配也可能不匹配)
\d 数字:[0-9]
\D 非数字: [ ^0-9 ]
\s 空白字符:[ \t\n\x0B\f\r]
\S 非空白字符:[ ^\s ]
\w 单词字符:[a-zA-Z_0-9]
\W 非单词字符:[ ^\w ]
X? X, 0次或1次
X* X,零次或多次
X+ X,一次或多次
X{n} X,恰好 n 次
X{n,} X,至少 n 次
X{n,m} X,至少 n 次,但是不超过 m 次
[abc] a、b 或 c(简单类)
\b 单词边界
\. 专一匹配
. 就一个点表示匹配任意字符
(x)代表x为一组
案例
手机号: ^((13[0-9])|(14[5|7])|(15([0-3]|[5-9]))|(17[013678])|(18[0,5-9]))\d{8}$
邮箱: ^([a-z0-9A-Z]+[-|_|\.]?)+[a-z0-9A-Z]@([a-z0-9A-Z]+(-[a-z0-9A-Z]+)?\.)+[a-zA-Z]{2,}$
身份证: 1\d{5}(18|19|([2]\d))\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\d{3}[0-9Xx]$
Matcher类 有两个方法
find : 判断是否可以找到字符串
Group: 去除割好的字符
其中Group不能离开find使用 必须哦按段是否有然后在取
栈: 压栈 进栈 入栈 出栈 弹栈 类似于子弹夹 先进后出
队列: 先进先出 漏斗模型
数组: 查询快(索引值) 增删慢(长度不可变)
链表: 查询慢(无索引) 增删快(有链表地址值(存的是下一个元素节点的地址))
二叉树: 二叉树特点 每个节点最多有两个子树
哈希表: 哈希值 哈希算法–散列算法 (类似数组和链表的结合)
第一个步骤:求每个元素的哈希码值,然后对哈希码值进行各种运算 得出一个索引值 然后将此数存放与此索处
第二个步骤:对索引值相同的数据进行处理 再散列 链表式链接
集合:
1.长度可变
2.只能存储引用类型
3.在不使用强制类型的时候,集合是可以存储任意引用类型的
数组:
1.长度不变
2.不但能存储基本类型,还能存储引用类型,但是数组内的类型必须保持一致
两者共同之处是: 都是作为数据的存储容器所在
集合的关系:
单列表集合:
Collection接口:
List接口:有序集合
ArrayList: 底层是数组
LinkedList: 底层是链表
Set接口:无序集合
HashSet: 底层是哈希表
TreeSet: 底层是二叉树
双列表集合:
Map接口: 这个是接口 双列表以键值对的形式出现
HashMap:底层是哈希表
TreeMap:底层是二叉树
数组的长度:length
字符串的长度:length()
集合的长度:size()
集合不是不可以存储基本类型 而是对基本类型进行自动装箱操作
collection 接口成员方法
boolean add(E e) 添加
boolean remove(Object o) 移除
void clear() 清空
boolean contains(Object o) 是否包含
boolean isEmpty() 是否为空
int size() 集合的长度
集合之间的操作
boolean addAll(Collection c) 添加所有
boolean removeAll(Collection c) 移除所有(凡是参数中包含的内容都会被移除掉)
boolean containsAll(Collection c) 是否全部包含
boolean retainAll(Collection c) 取交集
创建一个集合 Collection cl =new ArrayList(); 接口的多态(向上转型)
Object[] toArray() 把集合转成数组,可以实现集合的遍历
Iterator iterator() 得到一个迭代器的对象(每次运行都在首位开始,没有指针)
集合遍历
Iterator a = 集合.iterator(); while (a.hasNext()) { System.out.println(iterator.next());
泛型
Collection<Student> cl = new ArrayList<Student>();
可以直接使用student中的方法
list:有序的接口
1.有序: 这个有序并不是自动排序,而是按照你的存储顺序
2.允许重复元素
构造方法
void add(int index,E element) 插入
E remove(int index) 把指定索引的值移除掉
E get(int index) 索取指定索引对应的元素
E set(int index,E element) 替换
ListIterator listIterator() 获取ListIterator对象,用于迭代
遍历(倒序)
boolean hasPrevious() previous返回前一个元素
list的四种遍历
public static void main(String[] args) { List<Integer> li = new ArrayList<Integer>(); li.add(3); li.add(2); li.add(2); li.add(5); li.add(1); li.add(3); li.add(2); // 数组打印 Object[] a = li.toArray(); for (int i = 0; i < a.length; i++) { System.out.println(a[i]); } System.out.println("++++++++++++++++++++++"); // 普通迭代器遍历 Iterator<Integer> iterator = li.iterator(); while (iterator.hasNext()) { System.out.println(iterator.next()); } System.out.println("++++++++++++++++++++++"); // 列表迭代器遍历 // 倒着遍历 ListIterator<Integer> li2 = li.listIterator(li.size()); while (li2.hasPrevious()) { System.out.println(li2.previous()); } System.out.println("++++++++++++++++++++++"); // 正着遍历 ListIterator<Integer> li3 = li.listIterator(); while (li3.hasNext()) { System.out.println(li3.next()); } System.out.println("++++++++++++++++++++++"); // for循环遍历 for (int i = 0; i < li.size(); i++) { System.out.println(li.get(i)); } }
list去重
// 去除集合中字符串的重复值(字符串的内容相同) public static void main(String[] args) { List<String> list = new ArrayList<>(); list.add("大乔"); list.add("小乔"); list.add("二乔"); list.add("大乔"); list.add("二乔"); list.add("大乔"); list.add("大乔"); list.add("大乔"); list.add("小乔"); list.add("大乔"); //挨个对比删除 for (int i = 0; i < list.size(); i++) { for (int j = i+1; j <list.size(); j++) { if(list.get(i)==list.get(j)) { list.remove(j); j--; } } } System.out.println(list); //把不相同的储存到另一个集合 List<String> list2 = new ArrayList<String>(); for (int i = 0; i < list.size(); i++) { if(!list2.contains(list.get(i))) { list2.add(list.get(i)); } } System.out.println(list2); }
1-9 ↩︎