String中正则表达式的各种功能,集合Collection,list

正则表达式:就是一个描述或者匹配某种规则的一个表达式,一般是用于描述或者匹配某一个字符串是否满足条件

public boolean matches(String regex)方法:告知此字符串是否匹配正则表达式

Pattern搜索正则表达式构造方法

x   字符

\\ 反斜线字符

\t 制表符

\n 换行

\r 回车符

字符类

[abc] a或者b或者c

[^abc] 任何字符,除了abc

[a-zA-Z] 字母,无论大小写

预定义字符类

. 任何字符   如果只是想单独的表示一个点,用\.

\d 数字:[0-9]\\d

\D 非数字:[^0-9]\\D

\s 空白字符:[\t\n\f\r]\\s

\S 非空白字符:[^\s]\\S

\w 单词字符:[a-zA-Z_0-9]\\w,

\W 非单词字符:[^\w]

边界匹配器

^ 行的开头

$ 行的结尾

\b 单词的边界\\b内容\\b

\B 非单词的边界

\A 输入的开头

Greedy数量词 直接写?*+{}

X? X,一次或者一次也没有

X* X,零次或多次

X+ X,一次或多次

X{n} X,恰好n次

X{n,} X最少n次

X{n,m} X最少n次,但不超过m次

 

 

 

分割功能

public String[] split(String regex)根据给定的正则表达式拆分字符串

正则表达式为便于查看,regex一般写在外面,再用方法调用。

 

 

 

替换功能

public String  replaceAll(string regex,string replacement)使用给定的replacement替换此字符串匹配给定的正则表达式的字符串

regex多个用[(),(),()]

 

查找功能

Pattern(正则表达式的编译模式),matches(正则表达式的匹配器),complie(将给定的正则表达式编译到模式中),代码流程如下

String regex = "\\b[a-z]{3}\\b";
		String s = "xia yu le.ni pa bu pa?huang bu huang?";
		// public static Pattern compile(String regex):将给定的正则表达式编译到模式中
		Pattern pattern = Pattern.compile(regex);
		// public Matcher match(input)创建匹配给定输入与此模式的匹配器
		Matcher m = pattern.matcher(s);
		// public boolean find()进行扫描输入序列以查找与该模式匹配的下一个序列,再用group方法去进行取值
		while (m.find()) {
			System.out.println(m.group());
		}

 

 

 

 

集合:用来存储对象的容器,集合的长度是动态可变化的,而且集合只能存储引用类型数据,里面有很多针对对象的方法

数组都能存储,但是长度不可变,工具类也只有一个Arrays

java中集合类的关系图

HashMap HashSet

ArrayList LinkedList为主要的

 

 

 

Collection接口概述:是集合层次结构中的根接口,作为接口,里面的方法无法直接使用。一些collection允许有重复的元素:list接口 不循序重复:set接口

一些有序的:ArrayList,LinkedList,LinkedHashSet

一些无序的:HashSet

 

  是否有序是否允许元素重复
Collection
List
SetAbstractSet
 HashSet
 TreeSet是(用二叉排序树)
MapAbstractMap使用key-value来映射和存储数据,key必须唯一,value可以重复
 HashMap
 TreeMap是(用二叉排序树)

 

以ArrayList为例,实现Collection接口的成员方法

 

方法:

boolean add(E e) 将指定元素添加到此列表的尾部,添加成功返回true

boolean remove(object o) 移除此列表中首次出现指定元素

void clear() 清空集合

boolean contains(Object o) 判断参数对象在集合中是否存在

boolean isEmpty() 判断集合是否为空

int size() 返回集合的元素个数

Boolean addAll(collection  c) 将指定collection中的元素都添加到此collection中

boolean  removeAll(Collection c) 移除此collection中那些也包含在指定collection中的元素

Boolean retainAll(Collection c) 仅保留此collection中那些也包含在指定collection中的元素

boolean containAll(Collection c) 如果此collection中包含所有指定collection中的元素,返回true

Object[] toArray() 把集合转化成数组,实现集合的遍历

 

Iterator iterator()   迭代器,集合的专用遍历方式

iterator.hasnext();

iterator.next()

		Iterator iterator = list.iterator();
		while(iterator.hasNext()){
			Object next = iterator.next();
			while(next.equals("666")){
				iterator.remove();
				continue;
			}
		

只能产生一个迭代器,不能每次都是list.iterator().hasNext()      list.iterator().next()  这样会卡死

 

 

list集合:可以根据索引的位置插入和取出数据。元素可以重复,但存入和取出的顺序一致

set集合:元素是不能重复的,HashSet不能保证存入和取出的顺序一致,LinkedHashSet可以保证顺序一致

List成员方法:

void add(int index,E element)将元素插入到指定索引位置

E remove(int index)删除指定索引对应的值

E get(int index)获取指定索引对应的元素

E set(int index,E element)替换指定索引的元素

 

list特有的迭代器

ListIterstor listIterator()返回此列表的迭代器

列表迭代器的方法:hasprevious(),previous(),逆序。hasnext(),next()正序。

ListIterator listIterator = arrayList.listIterator();
		while(listIterator.hasNext()){
			System.out.print(listIterator.next()+"*");
		}
		System.out.println();
		while(listIterator.hasPrevious()){
			System.out.print(listIterator.previous()+"*");
		}

直接逆序无法显示,因为指针找不到前一个的值。正序用过之后,指针到了最后,才能读取到前面有值。

 

 

ListIterator和Iterator的不同点

1.使用范围不同,Iterator可以应用于所有的集合,Set、List和Map和这些集合的子类型。而ListIterator只能用于List及其子类型。

2.ListIterator有add方法,可以向List中添加对象,而Iterator不能。

3.ListIterator和Iterator都有hasNext()和next()方法,可以实现顺序向后遍历,但是ListIterator有hasPrevious()和previous()方法,可以实现逆向(顺序向前)遍历。Iterator不可以。

4.ListIterator可以定位当前索引的位置,nextIndex()和previousIndex()可以实现。Iterator没有此功能。

5.都可实现删除操作,但是ListIterator可以实现对象的修改,set()方法可以实现。Iterator仅能遍历,不能修改。

 

 

常用的数据结构

栈:先进后出,后进先出,进栈出栈

队列:先进先出,后进后出

数组:查找快,增删慢

链表:查找慢,增删快

树:查找慢,增删快  

 

原因如下:

查询:

数组直接用索引定位到某个位置

链表需要一个节点一个节点的找,效率很低

增加元素:

数组需要新建一个数组,将原数组的元素拷贝过去,再将新元素添加过去

链表新加一个元素,只需要把节点里面的指针域里面的地址变成新添加的节点的地址,链表增加很快

删除元素:

数组还需要新建,将不需要的删除元素都拷贝到新的数组中,效率低

链表删除一个元素:将节点后面的地址改成被删除节点指针域里面的地址,所以效率比较高

 

 

 

ArrayList和LinkedList的区别

ArrayList底层是数组,查找快,增删慢

LinkedList底层是链表,查找慢,增删快

 

 

存储自定义对象:

ArrayList list = new ArrayList();
		list.add(new Person("张三",18,'男'));
		list.add(new Person("李四",18,'男'));
		list.add(new Person("王五",20,'男'));
		list.add(new Person("夏红",25,'女'));
		Iterator iterator = list.iterator();
		while(iterator.hasNext()){
			System.out.println(iterator.next());
		}

 

public class Person {
	private String name;
	private int age;
	private char sex;
	public Person() {
		super();
	}
	public Person(String name, int age, char sex) {
		super();
		this.name = name;
		this.age = age;
		this.sex = sex;
	}
	@Override
	public String toString() {
		return "Person [name=" + name + ", age=" + age + ", sex=" + sex + "]";
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
	public char getSex() {
		return sex;
	}
	public void setSex(char sex) {
		this.sex = sex;
	}
}


class类中需要重写toString类

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值