1.数组
1.1.什么是数组
-
数组就是一个容器, 用来保存多个相同数据类型数据的容器。
1.2.动态初始化创建数组
-
创建数组时,必须声明数据类型 还有长度。
-
动态初始化创建数组。
-
创建数组语法:
-
变量: 数据类型 变量名 =变量值;
-
数组: 数据类型[] 数组名=new 数据类型[长度];
-
-
示例代码:
//数据类型[] 数组名 =new 数据类型 [长度] //eg:创建一个int型的数组,长度为3 int[] arr=new int[3]; //eg:创建一个double型的数组,长度为5 double[] arr2=new double[5]; System.out.println(arr);//是其地址值
1.3.使用数组
-
打印数组发现 打印出了一串乱码, 这个乱码叫做地址值, 使用数据 就是访问数组的地址值之后使用。
-
如何访问数组中的元素:
-
语法: 数组名[索引值]
-
索引值: 就是数组中元素的下标值, 编号 编号从0开始。
-
数组长度-1 就是最大索引值。
-
-
-
创建数组之后 数组中会根据数据类型 为数组中的元素赋默认值。
-
默认初始值:
-
整数类型:0
-
浮点类型:0.0
-
字符类型:\u0000(空格)
-
布尔类型:false
-
引用数据类型:null
-
-
如何为数组中的元素赋值;
-
语法: 数组名[下标值]=值;
int[] arr = new int[3]; double[] arr2 = new double[5]; char[] arr3 =new char[2]; String[] arr4=new String[5]; // 赋值 arr[0]=777; arr2[0]=7.77; // 访问数组中的元素 System.out.println(arr[0]); System.out.println(arr2[0]); System.out.println(arr3[0]);//打印默认值 System.out.println(arr4[0]);
用for循环方式打印数组:
-
// 数组的长度用 数组名.length 表示 for (int i = 0; i < arr.length; i++) { System.out.println(arr[i]); }
-
1.4.静态初始化创建数组
-
静态初始化:创建数组的时候直接将元素的值决定,由系统来确定长度!
-
格式:
-
完整格式:数据类型[] 数组名= new 数据类型[]{元素1,元素2.........};
-
省略格式:数据类型[] 数组名= {元素1,元素2,元素3};
-
// 完整格式:
double[] arr = new double[]{1, 2, 3, 4};
// 省略格式:
int[] arr2 = {1, 2, 3};
1.5.使用数组时常遇到的问题
-
数组索引越界异常:ArrayIndexOutOfBoundsException
-
出现原因: 访问了不存在的索引
-
解决办法: 修改为正确的即可
int[] arr ={1,2,3};
Array Index Out Of Bounds Exception
数组 索引 超出范围/越界 异常
System.out.println(arr[5]);
-
空指针异常:
-
出现原因: 当一个对象为null时 , 再访问这个对象时就会出现空指针。
-
解决办法: 给对象赋一个有效值。
int[] arr ={1,2,3}; // Null Pointer Exception // 空 指针 异常 // null 代表空值 , 引用数据类型的默认值 代表不指向任何有效的对象。 arr=null; System.out.println(arr[0]);
1.6.Arrays类方法
int []a={23,1,34,4,14};
System.out.println(a);//[I@5fd0d5ae
//toString打印数组元素
System.out.println(Arrays.toString(a));//[23, 1, 34, 4, 14]
//sort数组排序
Arrays.sort(a);
System.out.println(Arrays.toString(a));//[1, 4, 14, 23, 34]
//fill数组填充
//数组中所有元素填充为0
Arrays.fill(a,0);
System.out.println(Arrays.toString(a));//[0, 0, 0, 0, 0]
//数组下标为2到4之间的元素填充为1(包括2但不包括4)
Arrays.fill(a,2,4,1);
System.out.println(Arrays.toString(a));//[0, 0, 1, 1, 0]
1.7.小练习
P1:定义一个数组,输出其中最大值
// 1.定义一个数组
int [] arr={100,330,85,9632,525};
// 2.定义一个max,记录最大值使用
int max=arr[0];
// 3.遍历数组,拿到每一个元素,跟max比较
for (int i=1;i<arr.length;i++){
if(arr[i]>max){
max=arr[i];
}
}
System.out.println("最大值"+max);
P2:数组第一个元素和最后一个元素交换位置
int [] arr={2,3,4,5,6,7,8,9};
int temp=arr[arr.length-1];
arr[arr.length-1]=arr[0];
arr[0]=temp;
for (int i=0;i<arr.length;i++){
System.out.print(arr[i]);
}
2.String类
-
代表的是字符串对象。
-
String的构造方法
-
String str =new String("abc");
-
String str ="abc";
-
String str =new String(char[] arr);
-
String str=new String();
System.out.println(str);//空,因为没传值
char []arr={'1','a','2','b'};
String str1=new String(arr);
System.out.println(str1);//1a2b
System.out.println(str1.hashCode());//地址
String str3=new String("a");
System.out.println(str3);//a
-
成员方法:
-
equals();
-
比较的是两个字符串中的内容 ,区分大小写。
-
-
equalsIgnoreCase();不区分大小写的比较,也是比较内容
-
==号;
-
比较的是:基本数据类型:比较的是值。
-
引用数据类型:比较的是地址值。
-
-
char charAt(int index); 获取指定索引上的字符
-
int length() ;获取字符串长度。
-
String s1=new String("abcd");
String s2=new String("abcd");
System.out.println(s1.equals(s2));//true
System.out.println(s1==s2);//false
char c = s1.charAt(3);
System.out.println("c:"+c);//d
int length = s1.length();
System.out.println("length:"+length);//4
//字符还能比大小
System.out.println('a'>'n');//false
Arrays.toString(数组名);将该数组已[ , , , ]形式打印,其底层是一下代码:
public class StringDemo01 {
public static void main(String[] args) {
/**
* 给定一个数组 int[] arr={1,2,3};
* 编写一个方法 打印数组 : 输出样例:[1,2,3]
*/
// 定义一个数组
int[] arr = {1, 2, 3, 4};
//调用方法 ,用一个字符串对象接收结果。
String result = arrayToString(arr);
System.out.println("result = " + result);
}
public static String arrayToString(int[] arr) {
String result = "";
result += "[";
for (int i = 0; i < arr.length; i++) {
if (i == arr.length - 1) {
result += arr[i];
} else {
result += arr[i];
result += ",";
}
}
result += "]";
return result;
}
}
练习:反转字符串:声明一个字符串String str="abc";使用方法 将str反转成一个新字符串cba
public static void main(String[] args) {
String str1="abcdefg";
String str2=reverse(str1);
System.out.println("str1= "+str2);
}
public static String reverse(String s){
String result="";
for (int i = s.length()-1; i >=0; i--) {
char c=s.charAt(i);
result+=c;
}
return result;
}
拓展:String中的方法
2.1String类方法(判断功能)
public class StringMethod1 {
public static void main(String[] args) {
String str="abc";
String str1="ABC";
System.out.println(str.equals(str1));
//不区分大小写
System.out.println(str.equalsIgnoreCase(str1));
//判断在整个字符串是否以传入的字符串开头
String s="helloworld";
String s1="hello";
String s2="ello";
boolean flag = s.startsWith(s1);
boolean flag1 = s.startsWith(s2);
System.out.println("flag="+flag);
System.out.println("flag1="+flag1);
//判断在整个字符串是否以传入的字符串结尾
String s3="orld";
boolean flag2 = s.endsWith(s3);
System.out.println("flag2="+flag2);
//判断整个字符串是否包含传入的字符串
String s4="owo";
boolean flag3 = s.contains(s4);
System.out.println("flag3="+flag3);
//判断字符串是否为空
String str0="";
boolean flag4 = str0.isEmpty();
System.out.println("flag4="+flag4);
}
}
2.2String类方法(获取功能)
public class StringMethod2 {
public static void main(String[] args) {
String str="aabbccddbc";
// 传入一个字符串 获取 第一次出现的索引位置。
String str1="bc";
int index = str.indexOf(str1);
System.out.println("index = " + index);
//传入一个字符串 获取 最后一次出现的位置。
int index1=str.lastIndexOf(str1);
System.out.println("index1 = " + index1);
//截取字符串 指定索引处开始截取 , 默认到结尾 包含指定索引
String result = str.substring(1);
System.out.println("result = " + result);
//截取指定索引范围的字符串, 包含开始索引,不包含结束索引 包左不包右
String result1 = str.substring(1, 5);
System.out.println("result1 = " + result1);
}
}
2.3String类方法(转换功能)
public class StringMethod3 {
public static void main(String[] args) {
String str = "aaBbCcDdEe";
//将字符串转换成大写
String result = str.toUpperCase();
System.out.println("result = " + result);
//将字符串转换成小写
String result1 = str.toLowerCase();
System.out.println("result1 = " + result1);
//替换字符串
String result2 = str.replace("aa", "qqqqqqq");
System.out.println("result2 = " + result2);
//偶尔也可以用无空替换空格,以达到删点空格的目的
String str0 =" atu in ";
String replace = str0.replace(" ", "");
System.out.println("清除空格后"+replace);
//将字符串转换成char数组
char[] arr = str.toCharArray();
System.out.println("arr="+ Arrays.toString(arr));
}
}
2.4String类方法(其他功能)
public class StringMethod4 {
public static void main(String[] args) {
// 按指定规则切割字符串成几段
String str =" 123456,654321,22 22,sam,2022-10-10 ";
String[] arr = str.split(",");//以,为分割点将原字符串分成几组
for (int i = 0; i < arr.length; i++) {
System.out.println("arr[i]="+arr[i]);
}
//去掉字符串两端的空白
String result = str.trim();//只能去两端
System.out.println("result = " + result);
//要想去掉中间空格还是得用替换空格,所以索性直接替换全部
String result1= str.replace(" ","");
System.out.println("result1 = " + result1);
}
}
3.StringBuilder类
3.1StringBuilder概念
-
StringBuilder是一个可变的字符序列
-
来自于java.lang 包 所以不需要导包。
3.2StringBuilder的构造方法
-
StringBuilder(); 创建一个内容为空的字符串缓冲区对象。
-
StringBuilder(String str); 根据字符串内容来创建一个缓冲区对象。
StringBuilder sb=new StringBuilder();
System.out.println("sb = " + sb);
System.out.println(sb.length());
System.out.println(sb.hashCode());
sb.append("hello"); //拼接方法
System.out.println("sb = " + sb);
System.out.println(sb.hashCode());
//根据字符串内容 创建一个可变的字符串对象 括号中为内容
StringBuilder sb2 =new StringBuilder("helloworld!");
System.out.println("sb2 = " + sb2);
System.out.println(sb2.length());
3.3成员方法:
StringBuilder append(任何类型);拼接作用
StringBuilder reverse();内容反转
String toString(); 将StringBuilder转换成String
int length(); 长度
public class StringBuilder01 {
public static void main(String[] args) {
//创建对象
StringBuilder sb=new StringBuilder();
//StringBuilder append(任何类型);拼接作用
sb.append("hello").append("java").append(200);//多个拼接
System.out.println("sb="+sb);//sb=hellojava200
//StringBuilder reverse();内容反转
sb.reverse();
System.out.println("sb="+sb);//sb=002avajolleh
//String toString(); 将StringBuilder转换成String
String s=sb.toString();
System.out.println("s="+s);
//int length(); 长度
int i=sb.length();
System.out.println("i="+i);//12
}
}
3.4 案例——StringBuilder 判断对称字符串。
public class StringBuilder02 {
/**
* 判断数组中的每个字符串 是否是对称字符串
*
* 分析:
* 1. 遍历数组 ,拿到每一个字符串
* 2.通过StringBuilder来完成字符串的反转
* 3.反转后的字符串 和原来的字符串比较 eq
* true;对称
* false:
*/
public static void main(String[] args) {
String[] str ={"aa","ab","大王王大","上海海上","asdfghjk"};
print(str);
}
public static void print(String[] arr){
for (int i = 0; i < arr.length; i++) {
//遍历数组 拿到每一个字符串
String str= arr[i];
//通过StringBuilder 来完成字符串反转。
StringBuilder sb =new StringBuilder(str);
String result= sb.reverse().toString();//反转后又转为String类型,以使用String类中方法
if (str.equals(result)){
System.out.println(str+"是对称的");
}else{
System.out.println(str+"不是对称的");
}
}
}
}