String

什么是字符串

java. lang. String类代表字符串。
API当中说: Java 程序中的所有字符串字面值(如"abc" )都作为此类的实例实现。
其实就是说:程序当中所有的双引号字符串,都是String类的对象。(就算没有new, 也照样是。)
字符串的特点:
1.字符串的内容永不可变。[重点]
2.正是因为字符串不可改变,所以字符串是可以共享使用的。
3.字符串效果上相当于是char[字符数组,但是底层原理是byte[字节数组。
创建字符串的常见3+1种方式。.
三种构造方法:
public String(): 创建一个空白字符串, 不含有任何内容。
public String(char[] array): 根据字符数组的内容,来创建对应的字符串。
public String(byte[] array): 根据字节数组的内容,来创建对应的字符串。
一种直接创建:
String str = “Hello”; //右边直接用双引号
注意:直接写上双引号,就是字符串对象。

代码:

public class DemoString {
    public static void main(String[] args) {
        //使用空参构造
        String str1=new String();
        System.out.println("第一个字符串是:"+str1);

        //根据字符数组创建字符串
        char[] charArray ={'A','B','C'};
        String str2=new String(charArray);
        System.out.println("第二个字符串是:"+str2);

        //根据字节数组创建字符串
        byte[] byteArray ={97,98,99};
        String str3=new String(byteArray);
        System.out.println("第三个字符串是:"+str3);

        //直接构造
        String str4 = "Hello";
        System.out.println("第四个字符串是:"+str4);
    }
}

字符串常量池:

程序中直接写上的双引号字符串,就在字符串常量池中。new创建的不在池当中。
对于基本类型来说,=是进行数值的比较。
对于引用类型来说,==是进行[地址值]的比较。

public class DemoStringPool {
    public static void main(String[] args) {
        String str1="abc";//在常量池中创建了abc
        String str2="abc";//常量池中已经有了abc,就直接使用,不会重新创建
        char[] charArray={'a','b','c'};
        String str3=new String(charArray);

        System.out.println(str1==str2);//true(即地址值相同)
        System.out.println(str1==str3);//false
        System.out.println(str2==str3);//false
    }
}

字符串常量池原理(以上述代码为例)
在这里插入图片描述

字符串中的常用方法

一、字符串的内容比较:
1.public boolean equals(Object obj)
参数可以是任何对象, 只有参数是一个字符串并且内容相同才会返回true,否真返回false。
备注:
1).任何对象都能用object进行接收
2).equals()方法具有对称性。即a.equals(b) 和 b.equals(a) 效果一样。
3).如果比较双方一个是常量,一个是变量,建议将常量字符串放在前面
(如果变量为空,则会发生空指针异常)。
推荐:“abc”.equals(str) 不推荐 str.equals(“abc”)

  1. public boolean equalsIgnoreCase(String[] str):
    忽略大小写经行内容的比较
  public class DemoStringEquals {

    public static void main(String[] args) {
String str1="Hello";
String str2="Hello";
char[] charArray={'H','e','l','l','o'};
String str3=new String(charArray);

        System.out.println(str1.equals(str2));//true
        System.out.println(str1.equals(str3));//true
        System.out.println(str2.equals(str3));//true
        System.out.println("Hello".equals(str3));//true
        System.out.println("===================");

        String str4="hello";
        System.out.println(str1.equals(str4));//false
        System.out.println("===================");

        String str5=null;
        System.out.println("abc".equals(str5));//false
       // System.out.println(str5.equals("abc"));//空指针异常
        System.out.println("===================");


        String strA="Java";
        String strB="java";

        System.out.println(strA.equals(strB));//false
        System.out.println(strA.equalsIgnoreCase(strB));//true
    }


}

结果:
在这里插入图片描述

二、String中和获取有关的常用方法有:
1.public int length()
获取字符串中含有的字符个数,拿到字符串的长度
2.public String concat(String str):
将当前字符串和参数字符串拼接成为返回值新的字符串。
3.public char charAt(int index):
获取指定索引位置的单个字符串(索引从0开始)。
4.public int indexOf(String str)
查找参数字符串在本字符串中首次出现的索引位置,如果没有返回-1。

代码:

public class DemoStringGet {
    public static void main(String[] args) {
        //获取字符串长度
        int length="anasicnosnslnslknvscvknsipn".length();
        System.out.println("该字符串的长度是:"+length);
        System.out.println("==================");

        //拼接字符串
        String str1="Hello";
        String str2="World";
        String str3=str1.concat(str2);
        System.out.println(str1);//Hello
        System.out.println(str2);//World
        System.out.println(str3);//HelloWorld
        System.out.println("==================");

        //获取指定索引的单个字符串
        char ch="World".charAt(2);
        System.out.println("在2号索引位置的字符串是"+ch);
        System.out.println("==================");

        //查找字符串在本来字符串当中首次出现的索引位置
        //如果没有,返回-1;
        String original ="HelloWorld";
       int index= original.indexOf("llo");
       int index1=original.indexOf("rd");
        System.out.println("llo的第一次索引值是"+index);
        System.out.println("rd的第一次索引值是"+index1);
    }
}

结果:
在这里插入图片描述

三、字符串的截取方法:
1.public String substring(int index):
截取从参数位置一直到字符串末尾,返回新的字符串。
2.public String substring(int begin,int end):
截取从begin开始,到end结束,中间的字符串。[begin,end)

代码:

public class DemoSubstring {
    public static void main(String[] args) {
        String str1="HelloWorld";
        String str2=str1.substring(5);
        System.out.println(str1);    //HelloWorld
        System.out.println(str2);    //World
        System.out.println("==============");

        String str3=str1.substring(4,7);
        System.out.println(str3);      //oWo
    }
}

结果:
在这里插入图片描述
四、字符串当中与转换相关的方法
1.public char[] toCharArray():
将当前字符串拆分成字符数组作为返回值
2.public byte[] getBytes():
获得当前字符串底层的字节数组。
3.public String replace(CharSequence oldString,CharSequence newString)
将所用出现的老字符串替换成新的字符串,返回替换后的字符串。

代码:

public class DemoStringConvert {
    public static void main(String[] args) {
   char[] chars="Hello".toCharArray();
   System.out.println(chars[0]);
   System.out.println(chars.length);
   System.out.println("==============");

   //转换成字节数组
        byte[] bytes= "abc".getBytes();
        for (int i = 0; i < bytes.length; i++) {
            System.out.println(bytes[i]);
        }
        System.out.println("==============");

        String str1 ="how do you do?";
        String str2=str1.replace("o","*");
        System.out.println(str1);
        System.out.println(str2);
    }
}

结果:
在这里插入图片描述
五、分割字符串的方法
1.public String[] split(String regex):
按照参数的规则,将字符串切分成若干份
注意:
split方法的参数其实是一个正则表达式,如果要按照".“进行切割,则参数需要这样写:”\."。
代码:

public class DemoStringSplit {
    public static void main(String[] args) {
        //以","进行切割
        String str1="aaa,bbb,ccc,d,e";
       String[] array1= str1.split(",");
        System.out.println("字符串array1的长度是"+array1.length);
        for (int i = 0; i < array1.length; i++) {
            System.out.print(array1[i]+"   ");
        }
System.out.println("======================");

        //以" "进行切割
        String str2="aaa bbb ccc d e";
        String[] array2= str2.split(" ");
        System.out.println("字符串array2的长度是"+array2.length);
        for (int i = 0; i < array2.length; i++) {
            System.out.print(array2[i]+"   ");
        }
        System.out.println("======================");

        //以"."进行切割的错误写法
        String str3="aaa.bbb.ccc.d.e";
        String[] array3= str3.split(".");
        System.out.println("字符串array3的长度是"+array3.length);
        for (int i = 0; i < array3.length; i++) {
            System.out.print(array3[i]+"   ");
        }
        System.out.println("======================");

        //以"."进行切割的正确写法
        String str4="aaa.bbb.ccc.d.e";
        String[] array4= str4.split("\\.");
        System.out.println("字符串array4的长度是"+array4.length);
        for (int i = 0; i < array4.length; i++) {
            System.out.print(array4[i]+"   ");
        }

    }
}

结果:
在这里插入图片描述

和String相关的简单练习

1.定义一个方法,把数组{1,2,3}按照指定格式拼接成一个字符串。 格式参照如下: [word1 #word2#word3]。
分析:
1.首先准备一个int[]数组,内容是: 1、2、3
2.定义一个方法,用来将数组变成字符串
三要素:
返回值类型: String
方法名称: fromArrayToString
参数列表: int[]
3.格式: [word1#word2#word3]
用到: for循环、字符串拼接、每个数组元素之前都有一个word字样、分隔使用的是#、区分一下是不是最后一个
4.调用方法,得到返回值,并打印结果字符串
代码:

public class DemoStringPractice {
    public static void main(String[] args) {
    //准备一个int[]数组,内容是: 1、2、3
        int[] Array={1,2,3};
        
        String result =forArrayToString(Array);
        System.out.println(result);
    }
    
    //定义一个方法,用来将数组变成字符串
    public static String forArrayToString(int[] Array){
        String str="[";
        for (int i = 0; i < Array.length; i++) {
   //区分是不是最后一个
           if (i<Array.length-1)
           {
               str += "word"+Array[i]+"#";
           }
           else{
               str += "word"+Array[i]+"]";
           }
        }
        return str;
    }
}

结果:
在这里插入图片描述
2.键盘输入一个字符串,并且统计其中各种字符出现的次数。种类有:大写字母、写字母、数字、其他。

思路:
1.既然用到键盘输入,肯定是Scanner
2.键盘输入的是字符串,那么: String, str = sc.next();
3.义四个变量,分别代表四种字符各自的出现次数。
4.需要对字符串一个字、一个字检查,String–>char[], 方法就是toCharArray()
5.遍历char[字符数组,对当前字符的种类进行判断,并且用四个变量进行++动作。
6.打印输出四个变量, 分别代表四种字符出现次数。

代码:

import java.util.Scanner;

public class DemoStringPracticeCount {
    public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);
        
        String input=sc.next();
        int num=input.length();
        System.out.println("总字符串有"+num+"个字符");
        int countUpper=0;//大写字母
        int countLower=0;//小写字母
        int countNumber=0;//数字
        int countOther=0;//其他
        
        //将输入的字符串转换成单个字符
        char[] charArray= input.toCharArray();
        
        //遍历字符数组
        for (int i = 0; i < charArray.length; i++) {
            char ch=charArray[i];//获取当前单个字符
            
            if('A' <= ch && ch <= 'Z'){           //判断大写字母
                countUpper++;
            }
            else if('a' <= ch && ch <= 'z'){       //判断小写字母
                countLower++;
            }
            else if('0' <= ch && ch <= '9'){       //判断数字
                countNumber++;
            }
            else{                                  //判断其他
                countOther++;
            }
        }
        System.out.println("大写字母有:"+countUpper);
        System.out.println("小写字母有:"+countLower);
        System.out.println("数字有:"+countNumber);
        System.out.println("其他有:"+countOther);
    }
}

结果:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值