String类(续)常见功能转换功能byte[] getBytes() char[] toCharArray() String toLowerCase() String toUpperCase() String concat(String str)package top.zunmx.u1; // ALC-Master public class Demo1 { public static void main(String[] args) { String str="中国你好China123"; String str1="测试拼接字符串"; byte[] bys = str.getBytes(); for (int i = 0; i < bys.length; i++) { System.out.print(bys[i]+" "); }System.out.println(); for (int i = 0; i < bys.length; i++) { System.out.print((char)bys[i]+" "); }System.out.println(); char chs[] = str.toCharArray(); System.out.println(chs); for(int i = 0 ; i <chs.length;i++) { System.out.print(chs[i]+" "); }System.out.println(); System.out.println(str.toLowerCase()); System.out.println(str.toUpperCase()); System.out.println(str.concat(str1)); } } 其它功能String trim(); String replace(CharSequence target, CharSequence replacement); //CharSequence 包含StringScanner类import java.util.Scanner;构造方法public Scanner(InputStream source) //平常使用的Scanner sc = new Scanner(System.in); 就是此构造方法常见方法可以分为两大类：nextXxx和hasNextXxx例如： String next() boolean nextBoolean() byte nextByte() double nextDouble() float nextFloat() int nextInt() String nextLine() long nextLong() short nextShort() short nextShort(int radix) 接收字符串next() // tab 换行 空格作为结束标志 nextLine() // 换行作为结束标志注意：每一个数据的录入都有一个hasNextXxx来判断是否为相应类型的输入，返回值为布尔型遇到的问题先接收一个除nextLine之外方法，再用nextLine进行接收的话，会在接受完第一个数据后直接停止，而nextLine没有接收到数据。键盘录入会将我们录入的数据存入到一块内存中，通过next这种方法来从这个内存中获取。比如：nextInt 现存如内存中的数据是666/r 后面再来一个nextInt的话，这个nextInt会扫描到内存中的剩余的/r(因为nextInt并不以回车作为结束的标志，所以这个nextInt会不管这个/r，而继续进行录入)解决问题先用一个nextLine接收之前的换行，在用一个nextLine接收数据再创建一个Scanner对象，用来接收nextLine数据用next方法来替换nextLineMath类java.lang 包下，因此不需要importMath类包含用于执行基本数学运算的方法，如初等指数、对数、平方根和三角函数。常见方法abs 绝对值 sqrt 平方根 cbrt 立方根 floor 返回值小于等于参数，并等于某个整数。 eceil 返回值大于等于参数，并等于某个整数。 max 返回最大值 min 返回最小值 random 返回一个[0,1)之前的double型随机数 round 四舍五入常量PI 圆周率 E 自然对数的底数System类java.lang 包下，因此不需要import静态变量System.in 标准输入流，关联到键盘，键盘录入的内容 System.out 标准输出流，关联到控制台，用于打印。 System.err 标准错误六，也能打印在控制台，红色常见方法currentTimeMiles 返回当前的时间戳 gc 强制垃圾回收StringBuilderStringBuilder是在java.lang包下的，所以不用到包就可以直接使用一个可变的字符序列。不同步(没有加锁的)，效率会高一点主要操作是append和insert方法，可重载这些方法，以接受任意类型的数据StringBuilder(); //创建一个容量为16的StringBuilder对象 StringBuilder(CharSequence seq); //创建一个指定容量的SB对象 StringBuilder(String str); //创建一个指定字符串的SB，容量为16+传入字符串长度常见功能添加或插入功能append(text) insert(index,text)注意：StringBuilder可以扩容，如果默认容量为16，那么在第一次扩容时会变成16*2+2，后续如果再超过这个长度，那么SB的容量就和字符串长度保持一致。删除功能deleteCharAt(index) delete(begin,end)注意：delete包括左不包括右，end值可以大于length，不会报错，但是后面的没有意义。替换和反转replace(begin,end,text) reverse()查询功能indexOf(str)length() 获取字符串长度 capacity() 获取StringBuilder容量的方法StringBuilder/StringBuffer区别：出现的版本不同StringBuilder 1.5StringBuffer 1.0安全性不同StringBuilder 不同步StringBuffer 同步效率不同StringBuilder 高StringBuffer 低StringBuilder和String当作参数传递包装类类型之前学习的基本数据类型只能做一些简单的运算，一旦涉及到比较复杂的运算的时候，就无能为力了。但是我们知道方法中时可以帮助我们完成这些复杂的操作的，但是基本数据类型是没有方法的，只有引用数据类型才有方法。所以java给基本数据类型都通过了一个对应的引用数据类型。这种类型也被我们称为包装类型。基本数据类型 包装类类型byte[Byte]short[Short]long[Long]float[Float]double[Double]boolean[Boolean]int[Integer]char[Character]Integer构造方法Integer(int value) Integer(String s)常见方法int intValue(); static Integer valueOf(int i); static Integer valueOf(String s); static Integer toBinaryString(int i); static Integer toOctalString(int i); static Integer toHexString(int i); static int parseInt(String s); static String ValueOf(int i, int radix); //进制自动装箱拆箱现象装箱：将基本数据类型通过构造或者方法提升为其对应的包装类类型拆箱：将包装类类型通过构造或者方法将为其对应的基本数据类型自动装箱：将基本数据类型通过构造或者方法提升为其对应的包装类类型自动拆箱：将包装类类型通过构造或者方法将为其对应的基本数据类型正则表达式能匹配一系列字符串的较短的特殊字符串java.util.regex.Pattern 需要导包常见规则字符x 字符 x \\ 反斜线字符 字符类对字符集进行了升级，一次可以表达多个规则，但是一次还是只能匹配单个字符[abc] a、b 或 c（简单类） [^abc] 任何字符，除了 a、b 或 c（否定） [a-zA-Z] a 到 z 或 A 到 Z，两头的字母包括在内（范围） 预定义字符类之前的字符类写的太多，那么我们可以把他们简单化，简单化就是预定义字符类。也是只能匹配单个字符. 任何字符（与行结束符可能匹配也可能不匹配） \d 数字：[0-9] \D 非数字： [^0-9] \s 空白字符：[ \t\n\x0B\f\r] \S 非空白字符：[^\s] \w 单词字符：[a-zA-Z_0-9] \W 非单词字符：[^\w] 数量词以上都是只能匹配单个字符，但是加上数量词之后就可以匹配多个字符了X? X，一次或一次也没有 X* X，零次或多次 X+ X，一次或多次 X{n} X，恰好 n 次 X{n,} X，至少 n 次 X{n,m} X，至少 n 次，但是不超过 m 次 常见功能结合字符串中方法判断功能boolean matches(String regex); //告知此字符串是否匹配给定的正则表达式public class Demo4 { public static void main(String[] args) { String regex = "1[3589]\\d{9}"; System.out.println("输入一个手机号："); String phone = new Scanner(System.in).next(); System.out.println(phone.matches(regex)); } }分割功能String[] split(String regex); //根据给定正则表达式的匹配拆分此字符串替换功能replaceAll(String str1,String str2); replaceFirst(String str1,String str2);集合集合和数组都是一个容器，集合只能用来存储引用数据类型集合和数组的区别区别数组集合存储类型基本数据类型、引用数据类型引用数据类型长度长度声明好就不能改变可以动态增减graph LR A[Collection]-->B[List] B-->C[ArrayList] B-->D[LinkedList] A-->E[Set] E-->F[HashSet] F-->G[LinkedHashSet]Colleaction接口Collection 层次结构中的根接口一些 collection 允许有重复的元素，而另一些则不允许。一些 collection 是有序的，而另一些则是无序的。添加功能 boolean add(Object e) ; //添加一个元素 boolean addAll(Collection c); //添加一个组删除功能boolean remove(Object o); //移除一个元素 boolean removeAll(Collection<?> c) //移除一个组 void clear(); //清空判断功能boolean contains(Object o); //是否包含那个元素 boolean containsAll(Collection c); //是否包含那个组 boolean isEmpty(); //是否为空长度和转数组功能int size(); //长度 Object[] toArray(); //转数组迭代器iterator迭代器是和具体的对象绑定的Iterator<E> iterator() ;//返回在此collection的元素上进行迭代的迭代器package top.zunmx.d2; import java.util.ArrayList; import java.util.Collection; import java.util.Iterator; // ALC-Master class Student { String name; int age; public Student(String name, int age) { super(); this.name = name; this.age = age; } 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; } @Override public String toString() { return "Student [name=" + name + ", age=" + age + "]"; } } public class Demo1 { public static void main(String[] args) { Collection<Object> c = new ArrayList(); Student s = new Student("Jack Ma", 50); Student s1 = new Student("Tony Ma", 49); Student s2 = new Student("BG Ma", 69); c.add(s); c.add(s1); c.add(s2); System.out.println(c); System.out.println("<--------------------------->"); /* * 第一种遍历 */ Object[] obj = c.toArray(); for (int i = 0; i < obj.length; i++) { System.out.println(obj[i]); } System.out.println("<--------------------------->"); /* * 第二种遍历 迭代器 */ Iterator it = c.iterator(); while (it.hasNext()) { System.out.println(it.next()); } /* * ??? */ System.out.println("<------------3--------------->"); Iterator it1 = c.iterator(); while (it1.hasNext()) { Student sit = (Student) (it1.next()); System.out.println(sit.getName() + "-----" + sit.getAge()); } } } 求交集retainAll谁调用谁改变boolean retailAll(Collection c);// 仅保留此collection中那些也包含在指定collection的元素返回值：本身是否改变。使用集合的步骤创建集合对象创建元素对象[引用数据类型]将元素对象添加到集合对象中遍历集合toArray()迭代器通过Iterator 方法获取迭代器对象通过Iterator.hasNext方法判断是否可以继续迭代通过Iterator.next方法获取元素List接口有序的Collection(序列)，此处的有序是插入的有序性。可以通过索引访问，元素允许重复特有功能void add(int index, Object element);// 指定位置添加指定元素 Object get(int index) ;//获取指定位置的元素 Object remove(int index) ;//一处列表中指定位置的元素 Object set(int index, E element);// 用指定元素替换列表中指定位置的的元素package top.zunmx.d3List; import java.util.List; import java.util.ArrayList; import java.util.Iterator; // ALC-Master public class Demo { public static void main(String[] args) { List<Object> li = new ArrayList<Object>(); li.add("hello"); li.add("world"); li.add("java"); li.add(0, "java"); System.out.println(li); Iterator<Object> iterator = li.iterator(); // 遍历 while (iterator.hasNext()) { System.out.println(iterator.next()); } System.out.println("*************");// 获取 System.out.println(li.get(0)); System.out.println(li.get(2)); System.out.println("*************");// 遍历List的第三种方式 for (int i = 0; i < li.size(); i++) { System.out.println(li.get(i)); } System.out.println("*************"); // 移除返回的是移除的内容 System.out.println(li.remove(0)); System.out.println(li); System.out.println("*************"); //替换 li.set(0, "你好"); System.out.println(li); } } 注意：出现问题的原因:1．迭代器对象是属于某一个集合的，既然能通过迭代器获取到集合中的每一个元素，那就证明迭代器中包含了集合中的所有元素的内容。2.迭代器是先获取集合中的内容，然后再进行迭代的。3，遍历迭代器的同时又给原来的集合中添加了内容。(原集合是知道添加了元素的，但是因为迭代器对象是已经获取过的，迭代器对象并不知道添加了内容，所以再去遍历的时候就发生了错误）4．总结:迭代器对象和原集合对象不同步。ListIteratorList本身的迭代器提供了previous方法，使指针前移public static void main(String[] args) { List<Object> li = new ArrayList<Object>(); li.add("hello"); li.add("world"); li.add("java"); ListIterator<Object> lit = li.listIterator(); while (lit.hasNext()) { System.out.println(lit.next()); } while (lit.hasPrevious()) { System.out.println(lit.previous()); } }