Java_________数字与字符串2

目录

 

六:字符串

1,创建字符串(三种方法)

2,字符串特性

3,将字符串进行格式化

4   字符串长度,字符串.length()

七:字符串中的常用方法

1:获取字符:charAt (int index)

2:获取对应的字符数组

3:截取子字符串:subString()

4:分隔:split()

5:去掉收尾空格:trim()

6:大小写:toLowerCase()全部变小写,toUpperCase()全部变大写

7:定位:indexOf 判断字符或者子字符串出现的位置,contains 是否包含子字符串

8:替换:replaceAll替换所有,replaceFirst只替换一个

八:比较字符串

1:是否是同一个对象

2:是否是同一个对象—特例

3:内容是否相同

4:是否以子字符串开始或者结束

九:StringBuffer类型的字符串

1:StringBuffer对象的创建(3种)

2:常用方法:追加,删除,插入,反转

3:长度,容量


六:字符串

1,创建字符串(三种方法)

————(1)每当有一个字面值出现的时候,虚拟机就会创建一个字符串

————(2)调用String的构造方法创建一个字符串对象

————(3)通过+进行字符串拼接也会创建新的字符串对象

public static void main(String[] args) {
    String garen ="姜山"; //字面值,虚拟机碰到字面值就会创建一个字符串对象
    String teemo = new String("姜山"); //创建了两个字符串对象

    char[] cs = new char[]{'加','格'};
    String hero = new String(cs);//  通过字符数组创建一个字符串对象
    String hero3 = garen + teemo;//  通过+加号进行字符串拼接

 }

2,字符串特性

(1)String被修饰为final时,是不能被继承的。

(3)immutable(不可改变的)

不可改变的具体含义是指:不能增加长度,不能减少长度,不能插入字符,不能删除字符,不能修改字符。一旦创建好这个字符串,里面的内容 永远 不能改变。String 的表现就像是一个常量。

3,将字符串进行格式化

public static void main(String[] args) {
    String name ="盖伦";
    int kill = 8;
    String title="超神";

    //直接使用+进行字符串连接,编码感觉会比较繁琐,并且维护性差,易读性差
    String sentence = name+ " 在进行了连续 " + kill + " 次击杀后,获得了 " + title +" 的称号";
    System.out.println(sentence);

    //格式化字符串
    String sentenceFormat ="%s 在进行了连续 %d 次击杀后,获得了 %s 的称号%n";
    String sentence2 = String.format(sentenceFormat, name,kill,title);
    System.out.println(sentence2);
 }

4   字符串长度,字符串.length()

public static void main(String[] args) {
    String name ="盖伦";
    System.out.println(name.length());
    String unknowHero = "";
    System.out.println(unknowHero.length());//可以有长度为0的字符串,既空字符串
 }

七:字符串中的常用方法

1:获取字符:charAt (int index)

public static void main(String[] args) {
    String sentence="12345";
    char c=sentence.charAt(0);
    System.out.println(c);

 }

2:获取对应的字符数组

public static void main(String[] args) {
    String sentence="12345";
    char[] c=sentence.toCharArray();
    System.out.println(sentence.length()==c.length);

 }

3:截取子字符串:subString()

public static void main(String[] args) {
    String str="012345678";
    String subString1=str.substring(3);//截取从第3个开始的字符串 (基0)
    System.out.println(subString1);

    String subString2=str.substring(3,5);//截取从第3个开始,第5个终止的字符串 (基0)
    System.out.println(subString2);//左闭右开,3开5关

 }

4:分隔:split()

public static void main(String[] args) {
    String str="01,23,45,67";
    String sub[] =str.split(",");
    for(String s:sub){
        System.out.println(s);
    }
 }

5:去掉收尾空格:trim()

public static void main(String[] args) {
    String str="   01,23,45,67  ";
    System.out.println(str);
    System.out.println(str.trim());
 }

6:大小写:toLowerCase()全部变小写,toUpperCase()全部变大写

public static void main(String[] args) {
    String str="ABCDEF";
    String str1="asdf";
    System.out.println(str.toLowerCase());
    System.out.println(str1.toUpperCase());
 }

7:定位:indexOf 判断字符或者子字符串出现的位置,contains 是否包含子字符串

public static void main(String[] args) {
   String str="华山入口处的景色,是什么样子的";
    System.out.println(str.indexOf('入'));
    System.out.println(str.indexOf("华山"));
    System.out.println(str.indexOf(',','1'));
    System.out.println(str.lastIndexOf("的"));
    System.out.println(str.contains("样子"));
 }

8:替换:replaceAll替换所有,replaceFirst只替换一个

public static void main(String[] args) {
   String str="华山入口处的景色,是什么样子的";
   String temp=str.replaceAll("华山","泰山");
   System.out.println(temp);

   temp=temp.replaceAll("是什么样子的","-------");
    System.out.println(temp);

    temp=str.replaceFirst(",","-");
    System.out.println(temp);
 }

八:比较字符串

1:是否是同一个对象

==用于判断是否是同一个字符串对象

public static void main(String[] args) {
    String str="华山入口处的景色,是什么样子的";
    String str1=new String(str);
    System.out.println(str==str1);
}

2:是否是同一个对象—特例

public static void main(String[] args) {
    String str="华山入口处的景色,是什么样子的";
    String str1="华山入口处的景色,是什么样子的";
    System.out.println(str==str1);
}

一般说来,编译器每碰到一个字符串的字面值,就会创建一个新的对象
所以在第6行会创建了一个新的字符串"the light"
但是在第7行,编译器发现已经存在现成的"the light",那么就直接拿来使用,而没有进行重复创建

3:内容是否相同

使用equals进行字符串内容的比较,必须大小写一致 
equalsIgnoreCase,忽略大小写判断内容是否一致

public static void main(String[] args) {
    String str="abcde";
    String str1=new String(str);
    String str2=str.toUpperCase();
    System.out.println(str==str1);//str和str1不是同一个对象
    System.out.println(str.equals(str1));//str和str1的内容相同
    System.out.println(str.equals(str2));//str和str2的内容不同
    System.out.println(str.equalsIgnoreCase(str2));//在忽略大小写的情况下,str和str2的内容相同

}

4:是否以子字符串开始或者结束

startsWith //以...开始

endsWith //以...结束

public static void main(String[] args) {
    String str="an apple";
    String start="an";
    String end="aple";
    System.out.println(str.startsWith(start));
    System.out.println(str.endsWith(end));

}

九:StringBuffer类型的字符串

StringBuffer是可变长的字符串

1:StringBuffer对象的创建(3种)

(1)StringBuffer sb = new StringBuffer();

无参数的构造方法(默认创建了一个可容纳16个字符的StringBuffer)

(2)StringBuffer sb = new StringBuffer(100); //创建一个可容纳100个字符的字符串

带整形参数的构造方法(创建一个可容纳100个字符的字符串)

(3)StringBuffer sb = new StringBuffer("Hello");

以String对象作为参数的构造方法:可容纳长度为参数字符串长度,再加16 个字符 。

2:常用方法:追加,删除,插入,反转

append追加 
delete 删除 
insert 插入 
reverse 反转

public static void main(String[] args) {
    String str1 = "let there ";
    StringBuffer sb = new StringBuffer(str1); //根据str1创建一个StringBuffer对象
    sb.append("be light"); //在最后追加
    System.out.println(sb);

    sb.delete(4, 10);//删除4-10之间的字符,从1开始数
    System.out.println(sb);
    
    sb.insert(4, "there ");//在4这个位置插入 there
    System.out.println(sb);
    sb.reverse(); //反转
    System.out.println(sb);
}

3:长度,容量

为什么StringBuffer可以变长?
和String内部是一个字符数组一样,StringBuffer也维护了一个字符数组。 但是,这个字符数组,留有冗余长度
比如说new StringBuffer("the"),其内部的字符数组的长度,是19,而不是3,这样调用插入和追加,在现成的数组的基础上就可以完成了。
如果追加的长度超过了19,就会分配一个新的数组,长度比原来多一些,把原来的数据复制到新的数组中,看上去 数组长度就变长了 参考MyStringBuffer
length: “the”的长度 3
capacity: 分配的总空间 19

注: 19这个数量,不同的JDK数量是不一样的

public static void main(String[] args) {
    String str1 = "the";
    StringBuffer sb = new StringBuffer(str1);
    System.out.println(sb.length()); //内容长度
    System.out.println(sb.capacity());//总空间
}

猜你喜欢

转载自blog.csdn.net/Jiangshan11/article/details/82529726