Java字符串
执键写春秋 255 8

Java字符串

1. String 和StringBuilder

1.1 String

1.1.1 如何创建String对象

-方式一: String s1 = "HelloWorld"; //使用字符串常量创建字符串对象 -方式二: String s2 = new String(); //创建空字符串对象
-方式三: String s3 = new String("HelloWorld");

1.1.2 String对象的常用方法

Java字符串

1.1.3 ==和equals方法的区别

在Object类型中,equals()相当于==,比较的是地址,是否为同一对象。 String类对equals方法进行了重写,比较的是所指向的对象的内容是否相等。

1.1.4 String方法应用

  1. length()
    String str="JAVA Hello World";
         //打印输出字符串的长度
    System.out.println("字符串的长度是:"+str.length());
  2. charAt(int index)
    String str="JAVA Hello World";
    //打印输出字符串中第7个字符
    System.out.println(str.charAt(6));

提醒:charAt方法的参数最大值是字符串str的长度-1,超过长度范围会发生运行时异常。 3. substring(int beginIndex)

String str="JAVA Hello World";
  //打印输出字符串,从第6个字符开始
System.out.println(str.substring(5));
  1. substring(int beginIndex,int endIndex)
    String str="JAVA Hello World";
    //打印输出字符串,从第6个字符开始到第7个字符【第一个参数与第二个参数是左闭右开区间】
    System.out.println(str.substring(5,7));
  2. indexOf()
    String str="JAVA Hello World Hello";
    //查找字符'A'在字符串中第一次出现的位置
    System.out.println("字符'A'在字符串中第一次出现的位置"+str.indexOf('A'))
    //查找子串"Hello"在字符串中第一次出现的位置
    System.out.println("子串\"Hello\"在字符串中第一次出现的位置"+str.indexOf("Hello"));
    //在字符串index值为8的位置开始,查找子串"Hello"第一次出现的位置
    System.out.println("在字符串index值为8的位置开始,子串\"Hello\"在字符串中第一次出现的位置"+str.indexOf("Hello",8));
  3. lastIndexOf()
    String str="JAVA Hello World Hello"; 
    //查找字符'A'在字符串中最后一次出现的位置
    System.out.println("字符'A'在字符串中最后一次出现的位置"+str.lastIndexOf('A'));
    //查找子串"Hello"在字符串中最后一次出现的位置
    System.out.println("子串\"Hello\"在字符串中最后一次出现的位置"+str.lastIndexOf("Hello"));
    //在字符串index值为8的位置开始,查找子串"Hello"最后一次出现的位置
    System.out.println("在字符串index值为8的位置开始,查找子串\"Hello\"最后一次出现的位置"+str.lastIndexOf("Hello",8));

Java字符串我觉得这个 lastIndexOf(String str, int fromIndex)方法充满了恶意,我以前理解是在0到设定的下标区间里找子串,不完整的就是没有,但是看了源码才发现当遇到首字母H时,则就会自动向后搜索,查看是否是Hello,如果是,则会返回下标。】

1.1.5 Stirng的不可变性

  1. String对象一旦被创建,则不能修改,是不可变的。
  2. 所谓的修改其实是创建了新的对象,所指向的内存空间不变。给字符串的对象名指向一个新的字符串,只是指向的地址变了,原本的字符串没有修改。

    1.2 StringBuilder

    String与StringBuilder区别在于String具有不可变性,而StringBuilder不具备。

    1.2.1 StringBuilder构造

  3. StringBuilder()不带参数,默认生成一个空字符串,同时内存中给他开辟一个可以容纳16个字符的空间;
  4. StringBuilder(CharSequence seq) 提供一个接口,这个接口可以等同String类去使用;
  5. StringBuilder(int capacity)可以指定容量的参数 ;
  6. StringBuilder(String str)使用频率最高。构造一个初始化为指定字符串内容的字符串构建器;

    1.2.2 StringBuilder成员方法

  7. 许多append方法,是指在字符串末尾增加新的内容,属于一种重载方法;
  8. charAt方法:找某个位置字符;
  9. delete方法:删除字符;
  10. indexOf():字符或者子串第一次出现的位置;
  11. insert方法:在指定位置处插入一些内容,与append相似,但是可以选择位置;
  12. length()返回字符串的长度;
  13. replace()替换方法,把字符串中某个位置处字符或者子串用新的替换;
  14. substring()求子串方法;
  15. toString()方法:将StringBuilder对象转换为String类型对象;

    1.2.3 StringBuilder应用场景

    public class Demo {
     public static void main(String[] args) {
             //StringBuilder()不带参数,默认生成一个空字符串,同时内存中给他开辟一个可以容纳16个字符的空间;
               StringBuilder str1 = new StringBuilder();
               //StringBuilder(String str)使用频率最高。构造一个初始化为指定字符串内容的字符串构建器;
             StringBuilder str2 = new StringBuilder("World");
             System.out.println(str2);
             StringBuilder str3 = new StringBuilder("hello");
             //在字符串末尾增加新的内容
             str3.append(" XSC");
             System.out.println(str3);
             //返回字符串的长度;
             System.out.println("字符串长度:" + str3.length());
             //在指定位置处插入一些内容
             str3.insert(8,"@");
             //将StringBuilder对象转换为String类型对象
             String str4 = str3.toString();
             System.out.println(str4);
             // 创建一个空的StringBuilder对象
             StringBuilder str5 = new StringBuilder();
             // 追加字符串
             str5.append("jaewkjldfxmopzdm");
             // 从后往前每隔三位插入逗号
             for(int i = str5.length()-3; i>0; i=i-3){
                 str5.insert(i,',');
             }
             // 将StringBuilder对象转换为String对象并输出
             System.out.println(str5.toString());
             //使用replace放法直接替换
             System.out.println(str5.replace(4, 8, "ZQQ"));
             //使用delete直接删除
             System.out.println(str5.delete(9,10));
     }
    }
    
### 1.3 关于StringBuilder面试的问题
- **String 和StringBuffer的区别?**
JAVA平台提供了两个类:String和StringBuffer,它们可以储存和操作字符串,即包含多个字符的字符数据。这个String类提供了数值不可改变的字符串。而这个StringBuffer类提供的字符串进行修改。当你知道字符数据要改变的时候你就可以使用StringBuffer。典型地,你可以使用StringBuffers来动态构造字符数据。
- **下面语句创建了几个String Object? String s = new String("xyz")**
两个。一个对象的值是"xyz",一个对象new String("xyz")。
- **是否可以继承String类?**
String类是final类故不可以继承。
- **String 是最基本的数据类型吗?**
不是。Java中的基本数据类型只有8个:byte、short、int、long、float、double、char、boolean;除了基本类型(primitive type)和枚举类型(enumeration type),剩下的都是引用类型(reference type)。
评论区

索引目录