第二十节 String类

前言

    初学java语言的小白,日常记录个人所学、所思、所感、所获。
    请java语言行业的前辈们多多指教, 目前从事汽车制造行业。
    属于零基础自学,愿未来自己感谢今天的选择和努力。加油!

一、字符串的概述以及构造方法

2021、10、8更新
笔记:
今天去看了长津湖,感触颇多。人民有信仰,国家有力量,吾辈当自强。

import day16.Person;

import java.util.ArrayList;
import java.util.Random;
import java.util.Scanner;

/*
java.lang.String类代表字符串
API当中说,java程序中的所有字符串字面值(如"abc")都作为此类的实例实现
其实就是说:程序当中所有的双引号字符串,都是String类的对象。(就算没有new,也照样是。)

字符串的特点:
1.字符串的内容永不可变。
2.正是因为字符串不可改变,所以字符串是可以共享使用的。
3.字符串效果上相当于是char[]字符数组。但是底层原理是byte[]字节数组。

创建字符串的常见3+1种方式:
三种构造方法。
1.public String(); //创建一个空白字符串,不含任何内容。
2.public String(char[] array); //根据字符数组的内容,来创建对应的字符串。
3.public String(byte[] array); //根据字节数组的内容,来创建对应的字符串。

  //new就是在调用构造方法

一种直接创建
String str4 = “hello”;//右边直接创建
注意:直接写上双引号,就是字符串对象。

    //回顾下学习过的类似创建语句
    int [] array = new int[]{3};
    Scanner sc = new Scanner(System.in);
    Random r = new Random();
    ArrayList<String> al = new ArrayList<>();
    Person person = new Person();

*/
public class Demo01String {

public static void main(String[] args) {
    //使用空参构造
    String str = new String();//小括号留空,说明字符串什么内容也没有。

    System.out.println("第一个字符串"+str);//第一个字符串

    ///根据字符数组创建字符串
    //创建数组的标准格式
    //数据类型 数组名称 = new 返回值类型 {元素};
    char [] charArray = new char[]{'a','啊','不','c','A'};
    //创建集合
    String str2 = new String(charArray);
    System.out.println("第二个字符串"+str2);

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

    String str4 = "hello";//右边直接创建
    System.out.println(str4);


}

}

二、字符串的常量池

2021、10、8更新
笔记:

/*
字符串常量池:程序当中直接写上的双引号字符串,就在字符串常量池中。

对于基本类型来说,==是进行数值的比较
但是对于引用类型来说,==是进行【地址值】的比较

【重点注意】
1.对于引用类型来说,==是进行【地址值】的比较
2.双引号直接写的字符串在常量池当中,new的不在池当中。
*/
public class Demo02StringPool {

public static void main(String[] args) {

    String str1 = "abc";
    String str2 = "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
}

}
在这里插入图片描述

三、字符串的比较相关方法

2021、10、10更新
笔记:
近几天有点懈怠了。加油

import day01.HelloWorld;

/*

对于基本类型来说,==是进行数值的比较
但是对于引用类型来说,==是进行【地址值】的比较

==是进行对象的地址值比较.
如果确实需要字符串的内容比较,可以使用两个方法

方法一:

public boolean equals(0bject obj);//参数可以是任何对象
只有参数是一个字符串并且内容相同的才会给个true,否则返回值是false

注意事项:
1.任何对象都能用object进行接收。
2.equals方法具有对称性,也就是a.equals(b)和b.equals(a)效果是一样的。
3.如果比较双方一个常量一个变量,那么推荐把常量字符串写在前面。
推荐:“abc”.equals(str) 不推荐str.equals(“abc”)

方法二:
public boolean equalsIgnoreCase(String str);//忽略大小写,进行内容比较

*/
public class Demo03StringEquals {

public static void main(String[] args) {


    //比较两个字符串的内容是否一致
    String str1 = "Hello";
    String str2 = "Hello";
    char [] charArray = {'H','e','l','l','o'};
    String str3 = new String(charArray);

    //equals方法的运用
    System.out.println(str1.equals(str2));//true
    System.out.println(str1.equals(str3));//true
    System.out.println(str3.equals("Hello"));//true 不推荐写法
    System.out.println("Hello".equals(str1));//true

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

    String str5 = "abc";
    System.out.println("abc".equals(str5));// 推荐写法
    System.out.println(str5.equals("abc"));// 不推荐写法

   //不推荐原因如下

// String str6 = null;
// System.out.println(“abc”.equals(str6));// false
// System.out.println(str6.equals(“abc”));// 报错,空指针异常

    System.out.println("=================");

    String strA="java";
    String strB="Java";
    //方法一:equals
    System.out.println(strA.equals(strB));//false 严格区分大小写

    //方法二:equalsIgnoreCase
    System.out.println(strA.equalsIgnoreCase(strB));//true 忽略大小写

    //只有英文区分大小写,中文无法区分
    System.out.println("abc一".equalsIgnoreCase("abc壹"));//false

}

}

四、字符串获取的相关方法

2021、10、11更新
笔记:
突然想的是去当个能调plc的维修了。感觉维修以后的出路更广,哎呦喂。
/*

String当中与获取相关的方法有;

public int length();获取字符串当中含有的字符个数,拿到字符串长度。

public String concat(String str);将当前字符串和参数字符串拼接成为返回值新的字符串。

public char charAt(int index);获取指定索引位置的单个字符。(索引从0开始)

public int index (String str);查找参数字符串在本字符串当中首次出现的索引位置,如果没有返回-1值。

*/
public class Demo04StringGet {

public static void main(String[] args) {
    //获取字符串的长度
   int length = "adffasfhtjdsdsghfhdfhdhfd".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 = "Hello".charAt(1);
    System.out.println("在1号索引位置的字符是:"+ch);
    System.out.println("===========");

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

}

五、字符串截取的相关方法

2021、10、11更新
笔记:
走好脚下的每一步
/*

字符串的截取方法:

public String substring(int index);截取从参数位置一直到字符串末尾,返回新字符串。

public String substring(int begin,int end);截取从begin开始,一直到end结束,中间的字符串
备注:[begin,end )包含左边,不包含右边

*/
public class Demo05SubString {

public static void main(String[] args) {

    //index方法
    String str1 = "HelloWorld";
    String str2 = str1.substring(5);
    System.out.println(str1);//HelloWorld
    System.out.println(str2);//World

    //begin end方法
    String str3 = str1.substring(2,4);
    System.out.println(str3);//ll 注意为左开右闭区间[)

    //下面这种写法,字符串的内容仍然没有发生改变
    //下面是两个字符串一个叫"Hello";,另一个叫"Java"。
    //strA当中保存的是地址值。例如:两个叫张伟的人,不能因为名字一样,就认定为一人
    //本来地址值是Hello 0x666,
    //后来这个地址值变成了Java 0X999 变的不是右边的字符串,而是strA 保存的地址值
    String strA = "Hello";
    System.out.println(strA);//Hello
    strA = "Java";
    System.out.println(strA);//Java
}

}

五、字符串截取的相关方法

2021、10、12更新
笔记:
今天忙着做考勤自动化,暂时只更新一章,今晚似乎苹果要发布新的笔记本邀请函,有点小激动。终于要换了。

/*
String当中转换相关的常用方法有:

public char[] tocharArray();将当前字符串拆分成为字符数组作为返回值。

public byte[] getBytes();获得当前字符串的字节数组。

public String replace(CharSequence oldString,CharSequence newString);
将所有出现的老的字符串替换成为新的字符串,返回替换之后的结果新字符串。
备注:CharSequence意思是可以接受字符串类型

*/

import java.nio.charset.StandardCharsets;

public class Demo06StringConvert {

public static void main(String[] args) {

    //拆分成为字符数组
    char[] chars = "Hello".toCharArray();
    System.out.println(chars[0]);//H
    System.out.println(chars.length);//5
    System.out.println("============");

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

    }
    System.out.println("============");//97、98、99

    //替换老的字符串替换成为新的字符串
    String str1 = "How do you do?";
    String str2 = str1.replace("o", "*");

    System.out.println(str1);//How do you do?
    System.out.println(str2);//H*w d* y*u d*?

    //过滤屏蔽特殊词汇
    String str3 = "你个垃圾,我去你大爷的!";
    String str4 = str3.replace("垃圾", "*");
    String str5 = str3.replace("大爷", "*");
    System.out.println(str3);//你个垃圾,我去你大爷的
    System.out.println(str4);//你个*,我去你大爷的
    System.out.println(str5);//你个垃圾,我去你*的
}

}

六、字符串的分割方法

2021、10、13更新
笔记:

/*
分割字符串的方法
public String [] split(String regex):按照参数的规则,将字符串切分成为若干部分。

注意事项:
split方法的参数其实是一个正则表达式,今后学习。
今天注意,如果按照英文句点".“进行切分,必须写”\."(两个反斜杠)

*/
public class Demo07StringSplit {
public static void main(String[] args) {
String str1 = “aaa,bbb,ccc”;
String[] array1 = str1.split(",");

    for (int i = 0; i < array1.length; i++) {//aaa   bbb   ccc
        System.out.println(array1[i]);
    }
    System.out.println("============");

    String str2 = "aaa bbb ccc";
    String[] array2 = str2.split(" ");
    for (int i = 0; i < array2.length; i++) {
        System.out.println(array2[i]);//aaa   bbb   ccc
    }
    System.out.println("============");

    String str3 = "XXX.YYY.ZZZ";
    String[] array3 = str3.split(".");//错误写法
    System.out.println(array3.length);

    String[] array4 = str3.split("\\.");//正确写法
    for (int i = 0; i < array4.length; i++) {
        System.out.println(array4[i]);
    }
    System.out.println("============");

}

}

七、练习一 按指定格式拼接字符

2021、10、13更新
笔记:

/*
题目要求:
定义一个方法,把数组(1,2,3)按照指定格式拼接成为一个字符串。格式参照如下;[word1#word2#wore3]

思路分析:
1.首先准备一个int [] 数组,里面的内容是{1,2,3};
2.定义一个方法,用来将数组变成字符串
三要素
返回值类型;String
方法名称:getString
参数列表:int []

3.格式:[word1#word2#wore3]
用到:for循环 字符串拼接,每个数组元素之前都有一个word字样,分隔用的是#,区分下是不是最后一个。

4.调用方法,得到返回值并打印字符串
*/

public class Demo08StringPractise {

public static void main(String[] args) {
    //定义数组
    int [] array = {1,2,3};//[word1#word2#word3]


    System.out.println(getString(array));

}
    //定义方法
public static String getString( 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;
    }
}

七、练习二 统计字符串中各种字符出现的次数

2021、10、15更新
笔记:
发布会快来了,开心。
/*
题目要求:
键盘输入一个字符串,并且统计其中各种字符出现的次数。
种类有大写字母、小写字母、数字、其他

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

public static void main(String[] args) {

    Scanner sc = new Scanner(System.in);
    System.out.println("请输入一个字符串:");

    String input = sc.next();//获取键盘输入的一个字符串
    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++;
        }
    }
    //ABCDabcd12346*%$& 输入
    //大写字母有:4
    //小写字母有:4
    //字符数组有:5
    //其他字符有:4
    System.out.println("大写字母有:"+countUpper);
    System.out.println("小写字母有:"+countLower);
    System.out.println("字符数组有:"+countNumber);
    System.out.println("其他字符有:"+countOther);
}

}

心得体会

2021、10、15更新
近期不准学习新的只是了。安排复盘一下之前学过的知识,不能学一个忘一个。刚好准备整个思维导图。计划安排两周时间来完成这件事。加油
笔记:
2021、10、15

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值