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 包含String
Scanner类
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方法来替换nextLine
Math类
java.lang 包下,因此不需要import
Math类包含用于执行基本数学运算的方法,如初等指数、对数、平方根和三角函数。
常见方法
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 强制垃圾回收
StringBuilder
StringBuilder是在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.5
StringBuffer 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.总结:迭代器对象和原集合对象不同步。
ListIterator
List本身的迭代器
提供了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());
}
}

评论 0
还没有评论,来说点什么吧。