String,arraylist常用API
包
在自己程序中调用其他包的程序的注意事项
- 如果在当前程序中,要调用自己所在包下的其他程序,可以直接调用。(同一个包下的类可以相互调用)
- 如果在当前程序中,要调用其他包下的程序,则必须在当前程序中导包,才可以访问!(导包格式:import 包名.类名;)
- 如果在当前程序中,要调用Java提供的程序,也需要先导包才可以使用;但是Java.lang包下的程序是不需要导包,可以直接使用
- 如果在当前程序中,要调用多个包下的程序,而这些程序名正好一样,此时默认只能导入一个程序,另一个程序必须带包名访问。
String
String创建对象封装字符串数据的方式
方式一:直接双引号得到字符串对象,并封装字符串数据
方式二:调用String类的构造器初始化字符串对象
//创建一个空白字符串对象,不含有任何内容
String rs1 = new String();
//根据传入的字符串内容,来创建字符串对象
String rs2 = new String("it");
//根据字符数组的内容,来创建字符串对象
char[] chars = {'a', '黑','小'};
String rs3 = new String(chars);
//根据字节数组的内容,来创建字符串对象
byte[] bytes = {97,08,99};
String rs4 = new String(bytes);
String常用方法
遍历方法 字符串的遍历就是将字符串中的每一个字符一一获取出来 **int length()**:获取字符串的长度 **char charAt(int index)**:获取指定索引处的字符 **char[] toCharArray()**:将字符串转为字符数组(将字符串转换为字符数组) 注:字符串也是有索引的,用于对其中的字符进行编号,编号也是从0开始的,最大的索引值是字符串的长度-1 判断方法 **boolean equals(Object anObject)**:判断两个字符串的内容是否相等,区分大小写 **boolean equalsIgnoreCase(String anotherString)**:判断两个字符串的内容是否相等,不区分大小写 使用场景:验证码 **boolean startsWith(String prefix)**:判断一个字符串是以某个字符串开头 **boolean endsWith(String suffix)** :判断一个字符串是以某个字符串结尾 **boolean contains(String s)**:判断一个字符串中是否包含指定的字符串 其他方法 **String[] split(String regex)**:切割字符串并返回字符串数组回来 **String substring(int beginIndex)**:截取,从指定位置(包含)截取到末尾 **String substring(int beginIndex, int endIndex)**:截取,从指定位置开始(包含)截取到指定位置结束(不包含) **String replace(String target, String replacement)**:替换 **int lastIndexOf** 判断字符或字符串最后出现的位置 **int indexOf**判断字符或字符串第一次出现的位置(**如果没有找到就返回-1**) **toLowerCase** 把字符串转换为小写 **toUpperCase** 把字符串转换为大写
indexOf没有找到返回-1的用法:
public class Itheima { private int count(String str, String animal) { int count = 0, index = -1; while (true){ // 从指定索引index+1开始找下一个animal出现的位置 index = str.indexOf(animal, index + 1); if (index != -1) { // 找到了 count++; } else { // 没找到 break; } } return count; } public boolean catDog(String str) { int a = count(str,"cat"); int b = count(str,"dog"); return a==b; }
String使用时的注意事项
1.String对象的内容不可改变,被称为不可变字符串对象(每次试图改变字符串对象实际上是新产生了新的字符串对象了,变量每次都是指向了新的字符串对象,之前字符串对象的内容确实是没有改变的,因此说String的对象是不可变的。)
2.只要是以“…"方式写出的字符串对象,会存储到字符串常量池,且相同内容的字符串只存储一份;
但通过new方式创建字符串对象,每new一次都会产生一个新的对象放在堆内存中。(字符串拼接实际上是调用StringBuilder创建一个对象调用方法拼接产生一个新的字符串,对象New出来的所以在堆内存中,不在字符串常量池)
public class Test3 { public static void main(String[] args) { String s1 ='"abc" ; String s2 = "ab"; String s3 = s2 + "c"; System. out. println(s1 == s3);//fales } } public class Test4 { public static void main(String[] args) { String s1 = "abc"; String s2 = "a"+"b"+"C";//常量优化,直接出结果 System. out. println(s1 == s2);//true, } }
面试题:==和equals的区别:
==是关系运算符。既可以对基本类型进行比较,也可以对引用类型进行比较
比较基本类型数据是比较数据值是否相等
比较引用类型的数据,比较地址值是否相等
equals是一个方法,只能对引用类型的数据进行比较,不能对基本类型的数据进行比较。
比较引用类型数据的时候,如果没有修改比较的规则,则比较地址值,如果修改了比较的规则,则比较内容(String字符串就修改了规则,比较的是内容)
ArrayList
集合是一种容器,用来装数据,类似于数组
集合大小可变,开发中用的更多
ArrayList是集合最常用的一种,ArrayList是泛型类,可以约束存储的数据类型。
//< >:泛型(广泛的类型、泛泛的类型、未知的类型)
//但是泛型只能是引用类型,不能是基本类型
//泛型用于限制往集合中存储的元素的数据类型
ArrayList构造器:
创建对象,调用无参数构造器初始化对象:
public ArrayList();
ArrayList常用方法
1 public boolean add(E e)
将指定的元素添加到此集合的末尾
2 public void add(int index,E element)
在此集合中的指定位置插入指定的元素
3 public E get(int index)
返回指定索引处的元素
4 public int size()
返回集合中的元素的个数
5 public E remove(int index)
删除指定索引处的元素,返回被删除的元素
6 public boolean remove(Object 0)
删除指定的元素,返回删除是否成功
7 public E set(int index,E element)
修改指定索引处的元素,返回被修改的元素
//**删除集合中包含枸杞的每个元素**
//方式一:每次删除-一个数据后,就让i往左边退一步
for (int i =0; i < list.size(); 1++) {
//取出当前遍历到的数据
String ele = list.get(i);
//判断这个数据中包含枸杞
if(ele. contains("枸杞")){
//直接从集合中删除该数据
list. remove(ele);
1--;
}
}
System. out. println(list);
//方式二:从集合的后面倒着遍历并删除
for (int i = list.size() - 1; i >=0; 1--) {
//取出当前遍历到的数据
String ele = list.get(i);
//判断这个数据中包含枸杞
if(ele.contains("枸杞")){
//直接从集合中删除该数据
list.remove(ele);
}
}
System . out . println(list);
}