对于String的总结

创建字符串

常见的构造方式

// 方式一
String str = "Hello";
// 方式二
String str2 = new String("Hello");
// 方式三
char[] array = {'a', 'b', 'c'};
String str3 = new String(array);

字符串比较相等

String str1 = new String("Hello");
String str2 = new String("Hello");
System.out.println(str1 == str2);
// 执行结果
false

String 使用 == 比较并不是在比较字符串内容, 而是比较两个引用是否是指向同一个对象.

关于对象的比较
面向对象编程语言中, 涉及到对象的比较, 有三种不同的方式, 比较身份, 比较值, 比较类型.、

java中比较字符串中的内容,必须采用String类提供的equals方法.

String str1 = new String("Hello");
String str2 = new String("Hello");
System.out.println(str2.equals(str1));
// 执行结果
true

equals 使用注意事项

String str = new String("Hello");
// 方式一
System.out.println(str.equals("Hello"));
// 方式二
System.out.println("Hello".equals(str));
//一旦 str 是 null, 方式一的代码会抛出异常,方式二不会

“Hello” 这样的字面值常量, 本质上也是一个 String 对象, 完全可以使用 equals 等 String 对象的方法.

字符串常量池

如 “Hello” 这样的字符串字面值常量, 也是需要一定的内存空间来存储的. 这样的常量具有一个特点, 就是不需要修改(常量). 所以如果代码中有多个地方引用都需要使用 “Hello” 的话, 就直接引用到常量池的这个位置就行了, 而没必要把 “Hello” 在内存中存储两次.

在JVM底层实际上会自动维护一个对象池(字符串常量池)
1.如果现在采用了直接赋值的模式进行String类的对象实例化操作,那么该实例化对象(字符串内容)将自动保存到这个对象池之中.
2.如果下次继续使用直接赋值的模式声明String类对象,此时对象池之中如若有指定内容,将直接进行引用
3.如若没有,则开辟新的字符串对象而后将其保存在对象池之中以供下次使用

“池” 是编程中的一种常见的, 重要的提升效率的方式, 我们会在未来的学习中遇到各种 “内存池”, “线程池”, “数据库连接池” …

字符,字节,字符串

字符与字符串

1.public String (shar value[]) 功能:将字符数组中的所有内容变为字符串

2.public String(char value[],int offset,int count) 功能: 将部分字符数组中到达内容变为字符串

3.public char char charAt(int index) 功能:取得指定索引位置的字符,索引从0开始

4.public char[] toCharArray() 功能:将字符串变为字符数组返回

//        char[] array = {'a','b','c','d','e'};
//        String str1 = new String(array,0,5);//第0个位置到第5个  offset: 开始位置 count:结束位置
//        System.out.println(str1);  //a b c d e
//        String str = new String(array);   //将字符数组中的所有内容变为字符串
//        System.out.println(str);    // abcde
        String str2 = "abcdef";
        int a = str2.charAt(2);
        char ch = str2.charAt(2);  //将字符串中的部分位置转换为字符
        char[] array = str2.toCharArray();   //将字符串中的所有内容转换为字符
        System.out.println(a);// 99
        System.out.println(ch);// c
        System.out.println(Arrays.toString(array));// [a,b,c,d,e,f]

字节与字符串

1.public String(byte bytes[]) 功能: 将字节数组变成字符串

2.public String(bytr bytes[],int offset ,int length) 功能: 将部分字节数组中的内容变成字符串

3.public byte[] getBytes() 功能: 将字符串以字节数组形式的形式返回

public static void main9(String[] args) {
        byte[] bytes = {97,98,99,100};
        String str =new String(bytes);
        String str1 =new String(bytes,0,3);
        System.out.println(str1);  // abc
        System.out.println(str); // abcd
        String str2 = "abcd";
        byte[] byte2 = str2.getBytes();
        System.out.println(Arrays.toString(byte2));// 97  98  99  100
    }

小结

那么何时使用 byte[], 何时使用 char[] 呢?
byte[] 是把 String 按照一个字节一个字节的方式处理, 这种适合在网络传输, 数据存储这样的场景下使用. 更适合针对二进制数据来操作.
char[] 是把String 按照一个字符一个字符的方式处理, 更适合针对文本数据来操作, 尤其是包含中文的时候.
回忆概念: 文本数据 vs 二进制数据
一个简单粗暴的区分方式就是用记事本打开能不能看懂里面的内容.
如果看的懂, 就是文本数据(例如 .java 文件), 如果看不懂, 就是二进制数据

字符串常见操作

字符串比较

1.public boolean equais(bject anObject) 功能 : 区分大小写的比较

2.public boolean equaisIanoreCase(String anotherString) 功能:不区分大小写

3.public int compare (String anotherString) 功能:比较两个字符串大小关系

public static void main10(String[] args) {
        String str = "abcdef";
        String str1 = "Abcd";
        String str2 = "abcd";
        System.out.println(str.equals(str1));  //  false
        System.out.println(str.equalsIgnoreCase(str1)); // false  忽略大小写比较
        System.out.println(str1.compareTo(str2));
        System.out.println("A".compareTo("a")); // -32
        System.out.println("a".compareTo("A")); // 32
        System.out.println("A".compareTo("A")); // 0
        System.out.println("AB".compareTo("AC")); // -1
        System.out.println("刘".compareTo("杨"));
    }

字符串查找

1.public boolean contains(CharSequence s) 功能:判断一个子字符串是否存在
该判断形式是从JDK1.5之后开始追加的,在JDK1.5以前要想实现与之类似的功能,就必须借助、indexOf()方法完
成。

2.public int indexOf (String str) 功能: 从开头查找指定字符串的位置,查到了返回未知的开始索引,如果查不到则返回-1
如果内容重复,它只能返回查找的第一个位置

3.public int indexOf(String str , int fronIndex) 功能:从指定位置开始查找子字符串位置

4.public int lastIndexOf(String str) 功能:从后往前查找子字符串的位置

5.public int lastIndexOf(String str,int fronIndex) 功能:从指定位置右后往前查找
在进行查找的时候往往会判断开头或结尾。

6.public boolean startWith (String prefix) 功能:判断是否以指定字符串开头

7.public boolean startWith (String prefix,int toffest) 功能:从指定位置开始判断是否以指定子字符串开头

8.public boolean startWith (String syffix) 功能:判断是否以指定字符串结尾

public static void main11(String[] args) {
        String str = "helloworldorldrldldd";
        System.out.println(str.startsWith("he"));//true
        System.out.println(str.startsWith("he", 8));//false
        System.out.println(str.lastIndexOf("l",16));
        System.out.println(str.indexOf("o", 6));//6
    }

字符串替换

1.public String replaceAll(String regex,String replacement) 功能:替换所有的指定内容

2.public String replaceFirst(String regex,String replacement) 功能:替换首个内容

public static void main12(String[] args) {
        String str = "123456789";
        System.out.println(str.replaceAll("3", "9"));
        System.out.println(str.replaceFirst("1", "6"));
    }

字符串拆分

1.public string[] split (String regex) 功能:将字符串全部拆分

2.public string[] split (String regex,int limit ) 功能:将字符串部分拆分,该数组长度就是limit极限

String str = "bhi%abokn#njvs*bd%mlf#dld&b*";
        String[] ret = str.split("%|#|&|\\*");
        for (String s:ret) {
            System.out.println(s);
        }

字符串截取

1.public String substring (int beginIndex) 功能 : 从指定索引截取到结尾

2.public String substring (int beginIndex,int endIndex) 功能 :截取部分内容

public static void main(String[] args) {
        String str = "hjdshuoihugahsjfdk";
        System.out.println(str.substring(2, 6));//dshu
        System.out.println(str.substring(5));//uoihugahsjfdk
    }

其他方法

public static void main(String[] args) {
        String str = " Hjds HuOihu gGsOP fDk ";
        System.out.println(str.trim());//"Hjds HuOihu gGsOP fDk"
        System.out.println(str.toUpperCase());//" HJDS HUOIHU GGSOP FDK "
        System.out.println(str.toLowerCase());//" hjds huoihu ggsop fdk "
        System.out.println(str.intern());//" Hjds HuOihu gGsOP fDk "
        str.concat("jsgvui");
        System.out.println(str.length());//23
        System.out.println(str.isEmpty());//false
    }

StringBuffer 和StringBuilder

String和StringBuffer最大的区别在于:String的内容无法修改,而StringBuffer的内容可以修改。频繁修改字符串的
情况考虑使用StingBuffer。

首先来回顾下String类的特点:
任何的字符串常量都是String对象,而且String的常量一旦声明不可改变,如果改变对象内容,改变的是其引用的指向而已。
通常来讲String的操作比较简单,但是由于String的不可更改特性,为了方便字符串的修改,提供StringBuffer和StringBuilder类.
StringBuffer 和 StringBuilder 大部分功能是相同的,我们课件上主要介绍 StringBuffer.
在String中使用"+"来进行字符串连接,但是这个操作在StringBuffer类中需要更改为append()方法:
public synchronized StringBuffer append(各种数据类型 b)
String的内容不可修改,StringBuffer与StringBuilder的内容可以修改.

String、StringBuffer、StringBuilder的区别:
1.String的内容不可修改,StringBuffer与StringBuilder的内容可以修改.
2.StringBuffer与StringBuilder大部分功能是相似的
3.StringBuffer采用同步处理,属于线程安全操作;而StringBuilder未采用同步处理,属于线程不安全操作

小结

字符串操作是非常常用的操作. 使用起来都非常简单方便, 一定要使用熟练.
注意的点:

  1. 字符串的比较, ==, equals, compareTo 之间的区别.
  2. 了解字符串常量池, 体会 “池” 的思想.
  3. 理解字符串不可变
  4. split 的应用场景
  5. StringBuffer 和 StringBuilder 的功能.
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值