java学习day04

String类

String是不可变的

关于String类中的构造方法

String s = new String("");
String  s = "";
String s = new String(char数组);
String s = new String(char数组,起始下标,长度);
String s = new String(byte数组);
String s = new String(byte数组,起始下标,长度);

String字符串的存储原理

关于java JDK内置的一个类java.lang.String

  String表示字符串型,属于引用数据类型,不属于基本数据类型

  在java中使用双引号括起来的都是String对象

  在java中字符串是不可变的,字符串存储在方法区的字符串常量池中

String类的常用方法

char charAt(int index)

返回指定索引值的char值

int compareTo(Strin anotherString)

按字典顺序比较两个字符串

public class Demo2 {
    public static void main(String[] args) {
        int result = "abc".compareTo("abc");
        System.out.println(result);//0(等于0)前后一致

        int result1 = "abcd".compareTo("abce");
        System.out.println(result1);//-1(小于0)前小后大

        int result2 = "abce".compareTo("abcd");
        System.out.println(result2);//1(大于0)前大后小
    }
}

boolean contains(CharSequence s)

判断前面字符串是否包含后面的子字符串

boolean endsWith(Stiring suffix)

判断当前字符串是否以某个字符串结尾

boolean equalslgnoreCase(String anotherString)

判断两个字符串是否相等,并且同时忽略大小写

byte[] getBytes()

将字符串对象转换成字节数组

int indexOf(String str)

判断某个子字符串在当前字符串中第一次出现的索引(下标)

boolean isEmpty()

判断某个字符串是否为空

int length()

判断字符串长度

int lastIndexOf(string str)

判断某个字符串中最后一次出现的索引(下标)

String replace(CharSequence target,CharSequence replacement)

替换

String[] split(String regex)

拆分字符串

boolean startsWith(String prefix)

判断某个字符串是否以某个字符开始

String substring(int beginIndex)

截取字符串,参数是起始下标

String substring(int beginIndex,int endIndex)

截取字符串

左闭右开

beginIndex起始位置(包括)

endIndex起始位置(不包括)

char[] toCharArray()

将字符串转换为char数组

String toLowerCase()

转换为小写

String toUpperCase()

转换为大写

String trim()

去除字符串前后空白,不会去除中间空白

valueOf()

String中的静态方法

将非字符串转换为字符串

字符串拼接

StringBuffer

 

public class Demo2 {
    public static void main(String[] args) {
        //创建一个初始化容量为16byte[]数组(字符串缓冲区对象)
        StringBuffer stringBuffer = new StringBuffer();
    
        //拼接字符串,以后拼接字符串统一调用append()方法
        //append是追加的意思
        stringBuffer.append(“a”);
        stringBuffer.append(“b”);
        stringBuffer.append(“d”);
        stringBuffer.append(3.14);
        stringBuffer.append(true);
        //append()方法底层在进行追加的时候如果byte数组满了,会自动扩容    
    }
}        

创建StringBuffer对象时会默认初始化一个16byte[]数组

append()进行追加

若数组满了会自动进行扩容

在创建StringBuffer对象时最好能给定一个初始化容量,减少扩容次数

StringBuilder

StringBuilder和StringBuffer一样都可以进行字符串的拼接

不同点:StringBuffer是线程安全的,StringBuilder是非线程安全的

数组

数组的定义

  数组是相同类型数据的有序集合,数组描述的是相同类型的若干数据结构,按照一定的先后次序排列组合而成,其中每一个数据称作一个数组元素,每个数组元素都可以通过下标访问,数组下标从0开始

数组的声明创建(一维数组)

  数组必须先声明才能使用

静态初始化

数据类型[] 数组名 = {元素0,元素1,元素2};

int[] array = {1,2,3};

动态初始化

数据类型[] 数组名 = new 数据类型[数组长度];

int[] array = new int[3];

数组的声明创建(二维数组)

静态初始化

数据类型[][] 数组名 = {{元素0,元素1},{元素0,元素1},{元素0,元素1}};

int[][] arr = {{1,2,3},{1,2,3}};

动态初始化

数据类型[][] 数组名 = new 数据类型[数组长度][数组长度];

int[][] arr = new int[2][3];

数组的特点

  数组一旦被创建长度就不可变

  数组中的元素必须是相同类型,数组元素可以是任意类型

  数组属于引用数据类型

  数组存放在堆中

数组下标越界异常

因为数组下标从0开始,所有数组的下标范围是[0~length-1]

ArraylndexOutOfBoundsException:数组下标越界异常

数组的基本操作

访问数组元素:数组名[下标]

length属性:获取数组长度

遍历数组的两种方法

第一种普通for循环

第二种增强for循环

public class Demo2 {
    public static void main(String[] args) {
        int[] arr = new int[5];
      
for (int i = 0; i < arr.length; i++) { System.out.println(arr[i]); } for (int i:arr) { System.out.println(i); } } }

 

常用方法(静态方法,在Array类中)

  数组替换

  fill(int[] a,int value):a(要进行替换的数组),value(替换后的值)

  fill(int[] a,int fromIndex,int toIndex,int value):fromIndex(替换元素的第一个元素下标,包括),toIndex(替换元素的最后一个元素下标,不包括)

  排序:

  sort(object):object(数组名字),注意若数组元素是String类型则使用字典顺序进行排序

  复制数组:

  copyOf(arr,int newlength):arr(要进行复制的数组),newlength(指复制后的新数组的长度,若新数组长度大于arr数组长度则用对应的默认值进行填充

  copyOfRange(arr,int fromIndex,int toIndex):fromIndex(指定开始复制的数组的下标位置,包括),toIndex(指复制的最后一个元素的下标,不包括)

  数组查询:

  binarySearch(Object[] a,Object key):使用二分查找法来搜索指定数组,a(要搜索的数组),key(要搜索的值),返回值是索引

  binarySearch(Object[] a,int fromIndex,int toIndex,Object key):fromIndex(指定范围搜索的开始下标,包括),toIndex(指定范围搜索的结束下标,不包括),key要搜索的元素

posted @ 2021-09-17 20:41  hello小番茄  阅读(35)  评论(0)    收藏  举报