第三周学习总结
一、字符串
(一)API
API(Application Programming Interface,应用程序编程接口)是一些预先定义的函数,目的是提供应用程序与开发人员基于某软件或硬件得以访问一组例程的能力,而又无需访问源码,或理解内部工作机制的细节。
(二)String
String类创建字符串有两种方式:
第一种是直接把字符串赋值给String变量,如下:
String s1= "abc " ;
第二种是通过创建String对象的方式,如下:
String s2 = new String("abc");
第一种方式,JVM直接在字符串常量池中查找有没有”abc”的字符串,如果存在,则直接返回引用给变量s1,如果不存在,就直接新建一个”abc”字符串,然后把引用赋值给变量s1。
而第二种方式,JVM也会在字符串常量池中查找有没有”abc”的字符串,如果存在,则直接引用这个字符串在堆上新建一个String对象,如果不存在,就在常量池中新建一个"abc"字符串,然后引用这个字符串在堆上新建一个String对象。
所以,通过第一种方式创建的字符串,引用的都是字符串常量池中的字符串,如果字符串相同,则引用相同,而通过第二种方式创建的,每创建一个新的String对象,在堆上就有一个新的地址存放String对象,所以,每次new String(),得到的引用是不同的。
(三)比较
1 package com.itheima.stringdemo;
2 public class StringDemo2 [
3 public static void main(String[] args) [//1.创建两个字符串对象
4 String s1 = new String( original: "abc"); String s2="Abc";
5 //2.==号比较
6 //基本数据类型: 比的是数据值
7 //引用数据类型:比的是地址值
8 System.out.println(s1 == s2);//false
9 //3.比较字符串对象中的内容是否相等
10 boolean result1 = s1.equals(s2);
11 System.out.println(result1);
12 //4.比较字符串对象中的内容是否相等, 忽略大小写
13 boolen result2 = s1.equalslgnoreCase(s2);
14 System.out..println(result2);
一个实验案列:
1 package com.itheima.stringdemo;
2 importjava.util.Scanner;
3 public class StringDemo3[
4 public static void main(String[] args) [//1.假设我现在键盘录入一个abc
5 Scanner sc = new Scanner(System.in);System.out.print1n("请输入一个字符串");String str1 = sc.next();//abc
6 //2.代码中再定义一个字符串abc
7 String str2 = "abc”;
8 //3.用==比较, 这两者能 样吗?
9 System.out.print1n(str1 == str2);//false
(四)遍历字符串
具体实现:
1 package com.itheima.stringdemo;
2 import java.util.Scanner;
3 public class StringDemo5 [
4 public static void main(String[] args)
5 //1.键盘录入一个字符串
6 ScannersC =new Scanner(System.in);System.out.print1n("请输入一个字符串");String str = sc.next();
7 //2.进行遍历
8 for (int i = e;i< str.length(); i++) [//i 依次表示字符串的每一个索引
9 char c = str.charAt(i);
10 System.out.println(c);
11 )
(五)字符串拼接
方法实现:
1 package com.itheima.stringdemo;
2 public class StringDemo7 {
3 public static void main(String[] args) int[] arr =(1,2,3);
4 String str = arrToString(arr);
5 System.out.println(str);
6 }
7 public static String arrToString(int[] arr){
8 if(arr == null){
9 return "";
10 }
11 if(arr.length == 0)[
12 return "[]";
13 String result="[”;
14 //表示数组不是nu11,也不是长度为e的
15 for (int i = 0; i < arr.length;i++) f
16 //i 索引 arr[i] 元素
17 if(i == arr.length 1){
18 result= result +arr[i];
19 }elsef
20 result=result+arr[i]+",";
21 }
22 //此时拼接右括号
23 result = result +"]";
24 return result;
25 }
(六)字符串反转
1 package com.itheima.stringdemo;
2 public class StringDemo8 {
3 public static void main(String[] args)
4 String result= reverser( str: "abc");
5 System.out.println(result);
6 }
7 String reverser(String str){
8 String result ="";
9 for (int i = str.length()- 1; i >= e; i--) {//i 依次表示字符串中的每一个索引 (倒着的)
10 char c = str.charAt(i);
11 result= result + c;
12 }
13 return result;
14 }
(七)Stringbuilder
StringBuilder是一个可变的字符串类,我们可以把它看成是一个容器,这里的可变指的是StringBuilder对象中的内容是可变的
String和StringBuilder的区别
1、String内容是不可变的,StringBuilder内容是可变的
2、StringBuilder处理字符串性能比String好
用法:
(八)StringJoiner
StringJoiner是Java8新出的一个类,用于构造由分隔符分隔的字符序列,并可选择性地从提供的前缀开始和以提供的后缀结尾。
1 package com.itheima.stringjoinerdemo;
2 import java.util.StringJoiner;
3 public class StringJoinerDemo2 {
4 public static void main(String[] args) {
5 //1.创建对象
6 StringJoiner sj = new StringJoiner( delimiter:",",prefix:"[", suffix:"J");
7 //2.添加元素
8 sj.add("aaa").add("bbb").add("ccc");
9 int len = sj.length();
10 System.out.println(len);//15
11 //3.打印
12 System.out.println(sj);//[aaa, bbb,ccc]
13 String str = sj.tostring();
14 System.out.println(str);//[aaa, bbb,ccc]
15 }
16 }
(十)总结
(十一) 字符串原理
预计学习 : ArrayList