IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> Surpass Day16——Java Array工具类、String类、StringBuffer -> 正文阅读

[Java知识库]Surpass Day16——Java Array工具类、String类、StringBuffer

目录

1、Array工具类

1.1 排序:

1.2 二分法查找:

2、String类

2.1 String字符串的存储原理

2.2 String类常用的构造方法

2.3 String常用的方法

2.3.1 【取出某个元素】

2.3.2 【字符串比较】

2.3.3 【判断是否包含子字符串】

2.3.4 【判断是否以子字符串开始】

2.3.5 【判断是否以子字符串结尾】

2.3.6 【比较是否相等】

2.3.7 【判断两个字符串是否相等,忽略大小写】

2.3.8 【转换成字节数组】

2.3.9 【子字符串在当前字符串第一次出现处的索引(下标)】

2.3.10 【子字符串在当前字符串最后一次出现处的索引(下标)】

2.3.11 【判断是否为空】

2.3.12 【判断字符串长度】

2.3.13 【替换】

2.3.14 【拆分字符串】

2.3.15 【截取字符串】

2.3.16 【截取字符串(有终止下标)】

2.3.17 【将字符串转换成char数组】

2.3.18 【转换成小写】

2.3.19 【转换成大写】

2.3.20 【去除字符串前后空白】

2.3.21 【将非字符串转换成字符串】

3、StringBuffer

3.1 在字符串拼接时的资源浪费

3.2 优化程序引入StringBuffer

3.3 如何优化StringBuffer的性能

3.4 优化大量字符串的拼接的程序

3.5 StringBuffer和StringBuilder的区别


1、Array工具类

数组工具类:Java.utill.Arrays

1.1 排序:

Arrays.sout(数组名)

1.2 二分法查找:

int index = Arrays.binarySearch(数组名,查找的数)

返回值是元素的下标,若不存在则为-1


2、String类

2.1 String字符串的存储原理

关于Java JDK中内置的一个类:java.alng.String

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

2)在java中随随便便用双引号括起来的都是String对象

3)java中规定,双引号括起来的字符串是不可变的

4)JDK当中双引号括起来的字符串存储在方法区的"字符串常量池"当中的【字符串使用过于频繁,提高效率】

5)String类当中已经重写了equals()方法,直接调用即可

public class Text{
    public static void main(String[] args){
        //下面程序一共创建了三个对象,字符串常量池当中"xyz"
        堆内存当中两个对象,因为new两次
        String x = new String("xyz");
        String y = new String("xyz");
        System.out.println(x == y);//false
        
        String s1 = "hello";
        String s2 = "hello";
        System.out.println(s1 == s2);//true
        
        //所以直接直接赋值和创建对象的字符串比较结果是不同的,所以要通过equals()方法进行比较
        System.out.println("hello".quals(s1));//建议采用这种方法,避免了空指针异常
        System.out.println(s1.equals("hello"));//存在空指针异常的风险
        
        //i保存的是100
        int i = 100;
        //s保存的是字符串对象在字符串常量池当中的内存地址
        String s = "abc";
    }
}

?

2.2 String类常用的构造方法

1)String s = new String(" ");

2)String s = " ";(最常用的方法)

3)String(byte数组);【将byte数组全部转换为字符串】

byte[] bytes = {97,98,99};//97是a,98是b,99是c
String s2 = new String(bytes);

s2的输出结果为"abc";

4)String(byte数组,起始下标,长度);【将byte数组一部分转换为字符串】

byte[] bytes = {97,98,99};//97是a,98是b,99是c
String s3 = new String(bytes,1,2);

s3的输出结果为"bc";

5)String(char数组);【将char数组全部转换成字符串】

Char[] chars = {'我','是','中','国','人'};
String s4 = new String(chars);

s4的输出结果为"我是中国人"

6)String(char数组,起始下标,长度);【将char数组一部分转换为字符串】

Char[] chars = {'我','是','中','国','人'};
String s5 = new String(chars,2,4);

s5的输出结果为"中国人"

2.3 String常用的方法

2.3.1 【取出某个元素】

char charAt(int index)

char c = "中国人".charAt(1);
System.out.println(c);//国

2.3.2 【字符串比较】

int compareTo(String anotherString)

逐位比较: 前后一致(0)、前小后大(-1)、前大后小(1)

int result = "abc".compareTo("abc");
System.out.println(result);//0

2.3.3 【判断是否包含子字符串】

boolean contains(CharSequence s)

System.out.println("HelloWorld.java".contains(".java"));//true

2.3.4 【判断是否以子字符串开始】

boolean endWith(String suffix)

System.out.println("text.java".endWith("text"));//true

2.3.5 【判断是否以子字符串结尾】

boolean startWith(String suffix)

System.out.println("HelloWorld.java".startWith(".java"));//true

2.3.6 【比较是否相等】

boolean equals(Object anObject)

equals()方法只能看出是否相等,

compareTo()方法可以看出谁大谁小

2.3.7 【判断两个字符串是否相等,忽略大小写】

boolean equalsIgnoreCase(String anotherString)

System.out.println("ABC".equalsIgnoreCase(".Abc"));//ture

2.3.8 【转换成字节数组】

byte [] getBytes()

byte[] bytes = "abcdef".getBytes();
for(int i=0;i<bytes.length;i++){
    System.out.println(bytes[i]);//
}

2.3.9 【子字符串在当前字符串第一次出现处的索引(下标)】

int indexOf(String str)

System.out.println("oraclejavac++htmlc#phpython".indexOf("java"));//6

2.3.10 【子字符串在当前字符串最后一次出现处的索引(下标)】

int lastIndexOf(String str)

System.out.println("oraclejavac++htmlc#phpjavapython".indexOf("java"));//

2.3.11 【判断是否为空】

boolean isEmpty()

底层调用的是length()方法

String s = "";
System.out.println(s.isEmpty);//ture

2.3.12 【判断字符串长度】

int length()

判断数组长度是length属性,判断字符串长度是length()方法

System.out.println("abc".length());

2.3.13 【替换】

String replace(CharSequence target,CharSequence replacement)

String的父接口就是:CharSequence

String newString = "http://www.baidu.com".replace("http://","heetps://");
System.out.println(newString);//"https://www.baidu.com"

2.3.14 【拆分字符串】

String[ ] split(String regex)

String[] ymd = "1980-10-11".split("-");//以"-"分隔符进行拆分
for(int i=0;i<ymd.length;i++){
    System.out.println(ymd[i]);
}//1980 10  11

2.3.15 【截取字符串】

String substring(int beginIndex)

参数是起始下标

System.out.println("http://www.baidu.com".substring(7));//www.baidu.com

2.3.16 【截取字符串(有终止下标)】

String substring(int beginIndex,int endIndex);

System.out.println("http://www.baidu.com".substring(7,10));//www

左闭右开,起始下标【包含】,终止下标【不包含】

2.3.17 【将字符串转换成char数组】

char[] toCharArray()

char[] chars = "我是中国人".toCharArray();
for(int i = 0;i<chars.length;i++){
    System.out.println(chars[i]);
}//我    是   中   国   人

2.3.18 【转换成小写】

String toLowerCase()

System.out.println("ASDFG".toLowerCase());//asdfg

2.3.19 【转换成大写】

String toUpperCase()

System.out.println("asdfg".toLowerCase());//ASDFG

2.3.20 【去除字符串前后空白】

String trim()

System.out.println(" ? ? ? ?  asd ? wd ?  ".trim());//asd ? wd

2.3.21 【将非字符串转换成字符串】

valueOf

1)String中唯一的静态方法,不需要new对象

System.out.println(String.valueOf(100));//100(字符串)

2)参数是一个对象的时候,会调用该对象的toString()方法,但没有重写,输出的是对象的内存地址

System.out.println(String.valOf(new Customer());//是对象的内存地址

System.out.println()这方法在输出的时候都是先转成字符串再输出


3、StringBuffer

3.1 在字符串拼接时的资源浪费

若采用下列代码,贼会占有大量的内存区空间,造成内存空间的浪费

String s = "abc";
s += "hello";

就以上两行代码,就导致在方法区字符串内存池当中创建了三个对象:

"abc","hello","abchello"

3.2 优化程序引入StringBuffer

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

3.3 如何优化StringBuffer的性能

1)在创建StringBuffer的时候尽可能给定一个初始化容量

2)最好减少底层数组的扩容次数。预估计一下,给一个合适的较大的初始化容量,提高程序的执行效率

StringBuffer sb = new StringBUffer(100);

3.4 优化大量字符串的拼接的程序

建议使用JDK自带的:java.lang.StringBuffer和java.lang.StringBuilder

3.5 StringBuffer和StringBuilder的区别

StringBuffer方法都有:sychronized关键字修饰。表示StringBuffer在多线程环境下运行是安全的

StringBuilder方法都没有:sychronized关键字修饰。表示StringBuilder在多线程环境下运行是不安全的

  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2022-01-14 01:50:01  更:2022-01-14 01:50:15 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 7:43:53-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码