java——字符串、集合

1、字符串

字符串就是一个对象;动态初始化一个数组,就是创建一个对象;静态初始化一个对象,仍然是一个对象;字符串直接写上双引号,就是一个string类型的对象,string就是类名称;直接使用的字符串常量,也是字符串对象。

所有的类在使用时都需要导包,除了两种情况:

(1)需要使用的目标类,和当前类在同一包下

(2)要使用的目标类在java.lang<jdk的安装目录/lib/src/java.base/java/lang>下,但不包含子包内容

字符串是一个对象,其所对应的类就是String类,String类在java/lang下所以不需要导包。

打印paintln的方法逻辑:如果是字符串类型,直接显示内容;如果不是字符串,内部会想办法将其转换为字符串之后再显示,一般的对象都使用的是“类型信息@地址值”作为字符串内容显示。

2、创建字符串

字符串常见的2+1种方式(两种构造方法,一种直接赋值)

(1)格式:public  String(char[]  array)    参数是一个字符数组,根据字符数组的内容来创建一个字符串

(2)格式:public  String(char[] array , int offset , int count)    根据字符数组的一部分内容创建字符串,其中参数offset代表一个数组当中的起始索引,从0开始;count代表取用多少个字符。

package xwg.Eric.study.object;

public class CreateString {

	public static void main(String[] args) {
		char[] array = { 'l', 'i', 't', 't', 'l', 'e', ' ', 'B', 'a', 'b', 'y' };
		// 根据字符数组来创建字符串
		// 格式:类名称 对象名 = new 类名称(构造参数);
		String array1 = new String(array);
		System.out.println(array1);

		// 根据数组的一部分创建字符串
		String array2 = new String(array, 7, 4);
		System.out.println(array2);

		// 指定索引超出合理范围时,将会发生索引越界异常
		/*
		 * String array3 = new String(array, 20, 20);
		 * System.out.println(array3);
		 */
		// 直接赋值
		String array4 = "little baby";
		System.out.println(array4);
	}

}

3、字符串池(一般使用双引号直接赋值可以节省空间)

(1)字符串池是位于当中的一小块空间,用来保存若干个字符串的地址值,对象在栈中创建。对象依靠地址寻找池中对应的内容

(2)字符串池当中绝对不会出现重复的字符串对应的地址,保证字符串不重复

(3)凡是直接双引号的字符串默认都在池中,而new出来的字符串默认不在池中。

(4)对于基本类型来说,==是进行内容的相同比较,但是对于引用类型来说,==是进行地址值得相同比较

(5)如果是两个对象,那么地址值必然不同;如果地址值相同,必然是同一个对象(new)

引用过程:创建字符串存放在堆中,字符串将自己所对应的地址值存放在字符串池中,栈中的对象通过地址先找到字符串池中的地址,然后找到对应的字符串进行调用。

4、字符串内容比较

方法一:public boolean equals(Object obj):进行字符串的内容比较,严格区分大小写,参数obj是指另一个比较的对象object也是一种类型,可以接收任何数据类型的数据。

方法二:public boolean euqalsIgnoreCase(String str):进行字符串内容比较,不区分大小写。

注意:(1)要对字符串内容进行比较,一定要使用equals方法进行比较,不能使用==运算
(2)equals方法具有对称性:a.equals(b)与b.equals(a)相同
(3)如果equals方法需要比较的字符串当中尽量将常量写在前面即a位置处
(4)调用方法时,对象当中如果存储的是null值,则会发生空指针异常
(5)直接写上双引号就是字符串对象,所以用双引号直接点也能调用方法

package xwg.Eric.study.object;
public class StringContentCompare {
	public static void main(String[] args) {
		String str1 = "baby";
		char[] str = { 'b', 'a', 'b', 'y' };
		String str2 = new String(str);
		/*
		 * 使用==时进行对字符串的地址值得表,如果都是在字符串池且字符串内容相同,则地址值相等。
		 * 对于new出来的对象存放在堆中,产生新的地址指。
		 */ 
		System.out.println(str1 == str2);//false
		/*方法一:
		 * public boolean equals(Object obj):进行字符串的内容比较,严格区分大小写,参数obj是指另一个比较的对象
		 * object也是一种类型,可以接收任何数据类型的数据。
		 * 注意事项:(1)要对字符串内容进行比较,一定要使用equals方法进行比较,不能使用==运算
		 * (2)equals方法具有对称性:a.equals(b)与b.equals(b)相同
		 * (3)如果equals方法需要比较的字符串当中尽量将常量写在前面及a位置处
		 * (4)调用方法时,对象当中如果存储的是null值,则会发生空指针异常
		 * (5)直接写上双引号就是字符串对象,所以用双引号直接点也能调用方法
		 */
		boolean same = str1.equals(str2);
		System.out.println(same);//true
		System.out.println(str1.equals("love"));
		String str3 = null;
		System.out.println(str1.equals(str3));
		/*
		 * 对以上第(3)点进行检查
		 * 报错:java.lang.NullPointerException,空指针异常
		 */
		System.out.println(str3.equals(str1));
		/*方法二:
		 * public boolean euqalsIgnoreCase(String str):进行字符串内容比较,不区分大小写。
		 */
		String str4 = "Baby";
		boolean result = str4.equalsIgnoreCase(str1);
		System.out.println(result);
		System.out.println("Hello,little baby".equalsIgnoreCase("hello,little baby"));
	}
}

案例一

package xwg.Eric.study.november;
import java.util.Scanner;

public class EssayLogin {

	public static void main(String[] args) {
		String username = "baby";//注意在使用的密码中存在空格时,将无法输入密码就执行结果,即空格等同于确认(回车)
		String password = "love";
		
		Scanner sc = new Scanner(System.in);
		System.out.println("请输入用户名:");
		String firstname = sc.next();
		System.out.println("请输入密码");
		String firstpasswd = sc.next();
		
		if(firstname.equalsIgnoreCase(username) && firstpasswd.equals(password)){
			System.out.println("登录成功,小宝贝,请开始show");
		}else{
			System.out.println("登录失败,你不是我的小宝贝");
		}
	}
}

5、字符串内容替换

方法:public String replace(CharSequence oldStr,CharSequence newStr)参数oldStr代表需要被替换的字符串,newStr代表替换为的字符串,CharSequence就是字符串String。

注意:字符串内容不可发生改变。所以replace方法的返回值结果是一个全新的字符串

str.replace("aaa","bbb")//将字符串str中的aaa替换为bbb

6、字符串切割(split)

方法:public String[]  split(String regex):将regex作为标记进行切割,返回切分之后的若干字段的字符串,形成字符串数组

注意:不要使用英文句号.(点)作为切割标记,因为英文点在正则表达式中有特殊含义,参数regex实质为一个正则表达式,如果需要使用其作为分隔符,需要在前面加\\

package xwg.Eric.study.november;

public class StringReplaceAndSplit {

	public static void main(String[] args) {
		String str1 = "I love you baby";
		String str2 = str1.replace("baby", "little baby");
		System.out.println(str1);
		System.out.println(str2);

		String[] array = str1.split(" ");
		System.out.println("字符串数组长度:" + array.length);
		for (int i = 0; i < array.length; i++) {
			System.out.println(array[i]);
		}
	}

}

7、集合概述

集合与数组相类似,是一种因用哪个类型,可以保存很多数据,区别在与数组的长度不可以改变,集合的长度可以任意改变。集合包含很多种:ArrayList、HashSet、LinkedList、HasMap……通过API文档查询得ArrayList类属于java.util包中,使用时需要导包。

ArrayList常用的构造方法:public  ArrayList()默认无参数的构造方法

格式;类名称  对象名 = new  类名称    ArrayList<泛型>  list  =  new  ArrayList<>()

泛型:集合当中存放的全都是统一的一种引用类型的数据。

注意:泛型只能是引用类型,不能是基本类型

使用方法:

(1)添加元素:public boolean add(E element):向集合中添加一个元素,参数是被添加的元素,返回值是true表示成功

(2)获取元素:public E get(int index):从集合当中获取一个元素,参数是元素索引(从0开始),返回值为要获取的元素对象

(3)获取长度:public int size():获取集合的元素个数,集合的长度,得到int数字

package xwg.Eric.study.november;
import java.util.ArrayList;
public class CreatAndUseArrayList {
	public static void main(String[] args) {
		ArrayList<String> list = new ArrayList<>();
		// ArrayList<int> list = new ArrayList<>();错误写法,泛型只能是引用类型。
		System.out.println(list);		
		/*
		 * 添加元素
		 */
		list.add("I");
		list.add(" ");
		list.add("l");
		list.add("o");
		list.add("v");
		list.add("e");
		System.out.println(list);	
		/*
		 * 获取元素
		 */
		String name = list.get(2);
		System.out.println(name);//将集合中索引号为2(第三个)元素赋值给name并打印		
		/*
		 * 获取长度
		 */
		int length = list.size();
		System.out.println(length);	
		//增加元素
		list.add(" ");
		list.add("B");
		list.add("a");
		list.add("b");
		list.add("y");
		System.out.println(list);
		System.out.println(list.size());
	}
}

由于集合泛型存储的数据必须是引用类型,如果一定要存储基本类型,那么就要使用基本类型对应的“包装类”(包装类位于java.lang下,共8种)

基本类型对应的包装类
byteByte
shortShort
intInteger
longLong
float

Float

doubleDouble
charCharacter
booleanBoolean
ArrayList<Integer> list = new ArrayList<>();

从jdk1.5开始,基本类型可以和对应的包装类进行自动装箱(基本类型转化Wie包装类)拆箱(包装类转化为基本类型)

自定义引用类型的使用

定义类

package xwg.Eric.study.november;

public class CustomPerson {
	private String name;
	private int age;

	public CustomPerson() {

	}

	public CustomPerson(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;
	}

}

使用自定义类遍历集合

package xwg.Eric.study.november;

import java.util.ArrayList;

public class CustomPersonArrayList {

	public static void main(String[] args) {
		CustomPerson first = new CustomPerson("baby", 18);
		CustomPerson second = new CustomPerson("Baby", 1);

		ArrayList<CustomPerson> list = new ArrayList<>();
		list.add(first);
		list.add(second);

		System.out.println(list);
		for (int i = 0; i < 2; i++) {
			CustomPerson lala = list.get(i);
			System.out.println("姓名:" + lala.getName() + "年龄:" + list.get(i).getAge());
		}
	}
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值