java字符串StringStringBuilder 与集合ArrayList的“相爱相杀”

Posted 行行·失故路

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java字符串StringStringBuilder 与集合ArrayList的“相爱相杀”相关的知识,希望对你有一定的参考价值。

目录

1.String

1.1 概述

1.2 String类的特点

1.3 创建字符串对象两种方式的区别

1.4 String 构造方法

1.5 String 成员方法

1.6 应用

2.StringBuilder

2.1 概述

2.2 StringBuilder、StringBuffer类和String类的异同

2.3 构造方法

2.4 成员方法

2.5 应用

2.5.1 常见操作

2.5.2 StingBuilder 和 String 相互转化

3. 集合 ArrayList

3.1 概述

3.2 ArrayList类常用方法

3.2.1 构造方法

3.2.2 成员方法

3.3 应用


首先,介绍下什么是API

        API(Application Programming Interface,应用程序接口)是一些预先定义的接口(如函数、HTTP接口),或指软件系统不同组成部分衔接的约定。用来提供应用程序与开发人员基于某软件或硬件得以访问的一组例程,而又无需访问源码,或理解内部工作机制的细节。

        Java API :指的就是 JDK 中提供的各种功能的 Java类
这些类将底层的实现封装了起来,我们不需要关心这些类是如何实现的,
只需要学习这些类如何使用即可,我们可以通过帮助文档来学习这些API如何使用
下面是java API的下载链接:密码:1234

本文内容主要摘要java API文档

1.String

1.1 概述

String类java.lang 包下,所以使用的时候不需要导包

        String类代表字符串。 Java程序中的所有字符串文字(例如"abc" )都被实现为此类的实例。字符串不变; 它们的值在创建后不能被更改。 字符串缓冲区支持可变字符串。 因为String对象是不可变的,它们可以被共享。 例如:

     String str = "abc"

相当于:

     char data[] = {'a', 'b', 'c'};
     String str = new String(data);

以下是一些如何使用字符串的示例:

     System.out.println("abc");
     String cde = "cde";
     System.out.println("abc" + cde);
     String c = "abc".substring(2,3);
     String d = cde.substring(1, 2);

1.2 String类的特点

1)字符串不可变,它们的值在创建后不能被更改
2)虽然 String 的值是不可变的,但是它们可以被共享
3)字符串效果上相当于字符数组( char[] ),但是底层原理是字节数组( byte[] )

1.3 创建字符串对象两种方式的区别

1)通过构造方法创建:通过 new 创建的字符串对象,每一次 new 都会申请一个内存空间,虽然内容相同,但是地址值不同

2)直接赋值方式创建:以 " " 方式给出的字符串,只要字符序列相同(顺序和大小写),无论在程序代码中出现几次,JVM 都只会建立一个 String 对象,并在字符串池中维护

1.4 String 构造方法

String​()初始化新创建的 String对象,以使其表示空字符序列。 
String​(byte[] bytes)通过使用平台的默认字符集解码指定的字节数组来构造新的 String 。
String​(char[] value分配一个新的 String以便它表示当前包含在字符数组参数中的字符序列。 
String s = "abc"直接赋值的方式创建字符串对象,内容就是abc

1.5 String 成员方法

charAt​(int index)返回指定索引处的 char值
compareTo​(String anotherString)按字典顺序比较两个字符串
concat​(String str)将指定的字符串连接到该字符串的末尾
contains​(CharSequence s)

当且仅当此字符串包含指定的char值序列时才返回true。 

startsWith​(String prefix)测试此字符串是否以指定的前缀开头。
endsWith​(String suffix)测试此字符串是否以指定的后缀结尾。 
equals​(Object anObject)将此字符串与指定对象进行比较。 
getChars​(int srcBegin, int srcEnd, char[] dst, int dstBegin)将此字符串中的字符复制到目标字符数组中。 
indexOf​(int ch)返回指定字符第一次出现的字符串内的索引。 
indexOf​(int ch, int fromIndex)返回指定字符第一次出现的字符串内的索引,以指定的索引开始搜索。 
indexOf​(String str)

返回指定子字符串第一次出现的字符串内的索引。        

indexOf​(String str, int fromIndex)

返回指定子串的第一次出现的字符串中的索引,从指定的索引开始。 

lastIndexOf​(int ch)

返回指定字符的最后一次出现的字符串中的索引。 

lastIndexOf​(String str)

返回指定子字符串最后一次出现的字符串中的索引。 

length​()

返回此字符串的长度。 

replace​(char oldChar, char newChar)

返回从替换所有出现的导致一个字符串 oldChar ,在这个字符串 newChar 

replace​(CharSequence target, CharSequence replacement)

将与字面目标序列匹配的字符串的每个子字符串替换为指定的文字替换序列。 

toUpperCase​()

将此 String所有字符转换为大写,使用默认语言环境的规则。 

toLowerCase​()

将此 String所有字符转换为小写,使用默认语言环境的规则

trim​()

返回一个字符串,其值为此字符串,并删除任何前导和尾随空格。 

1.6 应用

常见操作

public class Demo {
    public static void main(String[] args) {
        String s = " Hello world";

        //返回指定索引处的 char值
        System.out.println(s.charAt(1));

        //将指定的字符串连接到该字符串的末尾
        System.out.println(s.concat("123"));

        //测试此字符串是否以指定的前缀开头
        System.out.println(s.startsWith("h"));

        //将此字符串与指定对象进行比较
        System.out.println(s.equals("hello"));

        //返回指定字符第一次出现的字符串内的索引
        System.out.println(s.indexOf("w"));

        //返回从替换所有出现的导致一个字符串 oldChar ,在这个字符串 newChar 
        System.out.println(s.replace("world","World"));

        //将此 String所有字符转换为大写,使用默认语言环境的规则。 
        System.out.println(s.toUpperCase());

        //将此 String所有字符转换为小写,使用默认语言环境的规则
        System.out.println(s.toLowerCase());

        //返回一个字符串,其值为此字符串,并删除任何前导和尾随空格。 
        System.out.println(s.trim());
    }
}

2.StringBuilder

2.1 概述

        一个可变的字符序列。 该类提供了一个与StringBuffer兼容的API,但不能保证同步。 该类被设计为在字符串缓冲区被单个线程使用的地方(作为一般情况)用作StringBuffer替代替代。 在可能的情况下,建议使用这个类别优先于StringBuffer因为它在大多数实施中将更快。 
        一个StringBuilder的主要操作是append和insert方法,它们是重载的,以便接受任何类型的数据。 每个都有效地将给定的数据转换为字符串,然后将该字符串的字符附加或插入字符串构建器。 append方法总是在构建器的末尾添加这些字符; insert方法将字符添加到指定点。 

        例如,如果z引用当前内容为“ start ”的字符串构建器对象,那么方法调用z.append("le")将导致字符串构建器包含“ startle ”,而z.insert(4, "le")会将字符串构建器更改为包含“ starlet ”。 

        一般情况下,如果某人是指的一个实例StringBuilder ,然后sb.append(x)具有相同的效果sb.insert(sb.length(), x) 。 

每个字符串构建器都具有容量。 只要字符串构建器中包含的字符序列的长度不超过容量,则不需要分配新的内部缓冲区。 如果内部缓冲区溢出,则会自动变大。 

StringBuilder实例不能安全使用多线程。 如果需要同步,那么建议使用StringBuffer 。 

除非另有说明,否则将null参数传递给null中的构造函数或方法将导致抛出NullPointerException 。 

2.2 StringBuilder、StringBuffer类和String类的异同

相同:

都是final类,不允许被继承,主要是从性能和安全性上考虑的,因为这几个类都是经常被使用着,且考虑到防止其中的参数被参数修改影响到其他的应用。

StringBuffer是线程安全,可以不需要额外的同步用于多线程中;

StringBuilder是非同步,运行于多线程中就需要使用着单独同步处理,但是速度就比StringBuffer快多了;

StringBuffer与StringBuilder两者共同之处:可以通过append、indert进行字符串的操作。

不同:

String类:内容是不可变的

StringBuilder类和StringBuffer类:内容是可变的

运行速度不同:

快慢为:StringBuilder > StringBuffer > String

总结:

 String:适用于少量的字符串操作的情况

 StringBuilder:适用于单线程下在字符缓冲区进行大量操作的情况

 StringBuffer:适用多线程下在字符缓冲区进行大量操作的情况

2.3 构造方法

StringBuilder​()构造一个没有字符的字符串构建器,初始容量为16个字符。 
StringBuilder​(int capacity)构造一个没有字符的字符串构建器,以及由 capacity参数指定的初始容量。 
StringBuilder​(CharSequence seq)构造一个字符串构建器,其中包含与指定的 CharSequence相同的字符。
StringBuilder​(String str)构造一个初始化为指定字符串内容的字符串构建器。 

2.4 成员方法

append​(char c)将 char参数的字符串表示追加到此序列。 
charAt​(int index)返回指定索引处的此序列中的 char值
delete​(int start, int end)删除此序列的子字符串中的字符。 
deleteCharAt​(int index)在此序列中的指定位置移除 char 。 
getChars​(int srcBegin, int srcEnd, char[] dst, int dstBegin)字符从该序列复制到目标字符数组 dst 。 
indexOf​(String str)返回指定子字符串第一次出现的字符串内的索引。 
insert​(int offset, char c)将 char参数的字符串表示插入到此序列中。
lastIndexOf​(String str)返回指定子字符串最后一次出现的字符串中的索引。 
length​()返回长度(字符数)。 
replace​(int start, int end, String str)用指定的 String的字符替换此序列的子字符串中的字符
reverse​()导致该字符序列被序列的相反代替。
toString​()返回表示此顺序中的数据的字符串。 

2.5 应用

2.5.1 常见操作

public class Demo {
    public static void main(String[] args) {
        //创建对象
        StringBuilder sb = new StringBuilder();
        //append(任意类型):添加数据,并返回对象本身
//        StringBuilder sb2 = sb.append("hello");
//        System.out.println("sb:" + sb);
//        System.out.println("sb2:" + sb2);
//        System.out.println(sb == sb2);

//        sb.append("hello");
//        sb.append("world");
//        sb.append("java");
//        sb.append(100);
        //链式编程
        sb.append("hello").append("world").append("java").append(100);
        System.out.println("sb:" + sb);

        //indexOf​(String str):返回指定子字符串第一次出现的字符串内的索引。 
        System.out.println("sb:" + sb.indexOf("java"));

        //replace​(int start, int end, String str):用指定的 String的字符替换此序列的子字符串中的字符
        sb.replace(0,5,"Hello");
        System.out.println("sb:" +sb);
        
        //reverse():返回相反的字符序列
        sb.reverse();
        System.out.println("sb:" + sb);

        //delete​(int start, int end):删除此序列的子字符串中的字符
        sb.delete(0,3);
        System.out.println("sb:" + sb);
    }
}

2.5.2 StingBuilder 和 String 相互转化

1)StringBuilder转换为String

  ​        public String toString():通过 toString() 就可以实现把 StringBuilder 转换为 String

2)String转换为StringBuilder

  ​        public StringBuilder(String s):通过构造方法就可以实现把 String 转换为 StringBuilder

public class Demo {
    public static void main(String[] args) {

        //StringBuilder 转换为 String
        StringBuilder sb1 = new StringBuilder();
        sb1.append("hello");

        //String s = sb; //这个是错误的做法

        //public String toString():通过 toString() 就可以实现把 StringBuilder 转换为 String
        String s1 = sb1.toString();
        System.out.println(s1);

        //String 转换为 StringBuilder
        String s2 = "hello";

        //StringBuilder sb = s; //这个是错误的做法

        //public StringBuilder(String s):通过构造方法就可以实现把 String 转换为 StringBuilder
        StringBuilder sb2 = new StringBuilder(s2);

        System.out.println(sb2);
    }
}

3. 集合 ArrayList

3.1 概述

集合:提供一种存储空间可变的存储模型,存储的数据容量可以发生改变

特点:底层是数组实现的,长度可以变化

泛型的使用:用于约束集合中存储元素的数据类型

3.2 ArrayList类常用方法

3.2.1 构造方法

ArrayList<String>  集合名  =  new  ArrayList<String>();

3.2.2 成员方法

add​(int index, E element)在此列表中的指定位置插入指定的元素。
add​(E e)将指定的元素追加到此列表的末尾。 
clear​()从列表中删除所有元素。 
contains​(Object o)如果此列表包含指定的元素,则返回 true 。
get​(int index)返回此列表中指定位置的元素。
indexOf​(Object o)返回此列表中指定元素的第一次出现的索引,如果此列表不包含元素,则返回-1。 
isEmpty​()如果此列表不包含元素,则返回 true 。 
remove​(int index)删除该列表中指定位置的元素。 
set​(int index, E element)用指定的元素替换此列表中指定位置的元素。 
size​()返回此列表中的元素数。 
sort​(Comparator<? super E> c)根据指定的Comparator引发的顺序排列此列表。 

3.3 应用

1)常见操作

//创建集合
        ArrayList<String> array = new ArrayList<String>();
        //添加元素
        array.add("hello");
        array.add("world");
        array.add("java");

        //输出集合
        System.out.println("array:" + array);

        //public int size():返回集合中的元素的个数
        System.out.println(array.size());

        //public boolean remove(Object o):删除指定的元素,返回删除是否成功
//        System.out.println(array.remove("world"));
//        System.out.println(array.remove("javaee"));

        //public E remove(int index):删除指定索引处的元素,返回被删除的元素
//        System.out.println(array.remove(1));

        //IndexOutOfBoundsException
//        System.out.println(array.remove(3));

        //public E set(int index,E element):修改指定索引处的元素,返回被修改的元素
//        System.out.println(array.set(1,"javaee"));

        //IndexOutOfBoundsException
//        System.out.println(array.set(3,"javaee"));

        //public E get(int index):返回指定索引处的元素
//        System.out.println(array.get(0));
//        System.out.println(array.get(1));
//        System.out.println(array.get(2));
        //System.out.println(array.get(3)); 

2)集合遍历

import java.util.ArrayList;
public class Demo {
    public static void main(String[] args) {
        //创建集合
        ArrayList<String> array = new ArrayList<String>();
        //添加元素
        array.add("小明");
        array.add("小红");
        array.add("小王");
        //遍历集合,其次要能够获取到集合的长度,这个通过size()方法实现
        //System.out.println(array.size());
        //遍历集合的通用格式
        for(int i=0; i<array.size(); i++) {
            String s = array.get(i);
            System.out.println(s);
        }
    }
}

 输出结果:

 

 

 

以上是关于java字符串StringStringBuilder 与集合ArrayList的“相爱相杀”的主要内容,如果未能解决你的问题,请参考以下文章

java 处理字符串的工具类都有哪些

Java_字符串池以及字符串类

java字符串数组扩容,新人学java

java 中字符串 怎么比较大小

java字符串日期排序比较问题

java获取字符串长度