ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

2022-07-20 第八组 卢睿 学习心得

2022-07-20 22:01:49  阅读:129  来源: 互联网

标签:20 07 int s1 str 2022 abcdefg 字符串 String


Java

今日重点

  1. String字符串
  2. 比较字符串的方法
  3. 字符串的长度
  4. 取出指定下标位置的字符
  5. 判断字符串是否存在
  6. 字符串的截取
  7. String字符串别的方法

学习感想

String关键字挺好理解的,都是方法,但是员工管理系统把我讲迷糊了,调用来调用去的,很痛苦,但是晚上老师又重新讲了一遍,思路清晰了很多,再多理解理解就通透了,需要再多写两遍。

String字符串

String是一个类
类可以有哪些结构
属性,方法,构造器
String这个类也有属性,方法,构造器
String一旦声明不可改变(内存级别)

String 既然是一个类,s1应该叫做String类的对象。类如果要创建对象,要new,而s1没有new,s1也可以叫做对象

String s1 = "abcdefg";   //s1在栈里,"abcdefg"在方法区里

s2是通过new创建出来的String类的对象,创建对象是要调用构造器

String s2 = new String("abcdefg");  //new的在堆里

s1和s2指向的"abcdefg"不在同一个区域内
验证:

System.out.println(s1 == s2);

双等号比较的是虚地址,虚地址:对象在内存中的存储位置

        String s1 = "abcdefg";
        String s2 = new String("abcdefg");
        String s3 = new String("abcdefg");
        String s4 = "abcdefg";
        System.out.println(s1 == s2);
        System.out.println(s3 == s2);
        System.out.println(s1 == s4);

输出 false false true

比较字符串的方法

equals方法:

  1. 需要传参,传String类型的参数
  2. 有返回值,返回值是boolean类型的
  3. 访问权限public

长度

字符串 字符拼成的串
下标(索引)从0开始

length方法:

  1. 不需要方法
  2. 有返回值,整型int
  3. 访问权限public
        String s1 = "abcdefg";
        System.out.println(s1.length());

面试题:
字符串获取长度的方法和数组获取长度有什么区别?

  1. 数组的length是属性,字符串的length是方法

取出指定下标位置的字符

.charAt()

        String s1 = "abcdefg";
        System.out.println(s1.charAt(5));
        Scanner sc = new Scanner(System.in);
        char c = sc.next().charAt(0);
        System.out.println(c + 1);

判断字符串是否存在

.indexOf
返回值为字符串在s1的下标
返回从左到右遇到的第一个匹配的下标
如果不存在,返回-1
indexOf(String,int)代表从int位置开始查找,包括当前位置
s1.lastIndexOf 从后往前找
下标永远是从左向右

案例(统计一个字符串在另一个字符串中出现的次数)

我的写法

package com.morning;

/**
 * 统计一个字符串在另一个字符串中出现的次数
 */
public class Ch05_Demo {
    public static void main(String[] args) {
        String s1 = "abcdefgabcdaaa";

        //charAt
        int count = 0;
        for (int i = 0; i <= s1.length()-1; i++) {
            if (s1.charAt(i) == 'a' ){
                count ++;
            }

        }
        System.out.println(count);
    }
}

另一个写法

package com.morning;

/**
 * 统计一个字符串在另一个字符串中出现的次数
 */
public class Ch05_Demo {
    public static void main(String[] args) {
        String s1 = "abcdefgabcdaaa";
        char target = 'a';
        int count = 0;
        int i = 0;
        while (i<s1.length()){
            int i1 = s1.indexOf(target,i);
            if (i1 != -1){
                count++;
                i = i1 + 1;
            }else{
                i++;
            }
        }
        System.out.println(count);
    }
}

字符串的截取

.substring(1)

如果传一个参数,从指定位置开始截取,直到字符串的末尾
包括1位置,包括起始位置的字符
生成一个新的字符串,不会改变原有数据

str.substring(1,2);

包括起始位置,不包括终止位置

转大写

str.toUpperCase;

转小写

str.toLowerCase();

判断是否以xxx开头

str.startsWith("a",2);
2是偏移量

判断是否以xxx结尾

str.endsWith("f");

忽略大小写进行比较

str.equalsIgnoreCase(str1);

去掉字符串前后的空格

str.trim();

根据指定的字符串分割

str.split(",");
用数组存
(分割之后,分割条件消失)

字符串的替换

str.replace()
str.replaceAll()----替换所有

数据类型转换

转成字符型数组
char []array = str.toCharArray();
字符串转成字节型数组
byte []bytes = str.getBytes();
把int类型转成字符串(推荐)
String s = String.valueOf(i);

包装器类型

包装类,封装类

 * byte--------->Byte
 * short--------->Short
 * int--------->Integer
 * long--------->Long
 * float--------->Float
 * double--------->Double
 * char--------->Character
 * boolean--------->Boolean
 *
 * 为什么要有包装器类型?
 *   场景
 *      员工管理系统
 *      员工:年龄* int age;薪水
 *      计算平均年龄,平均工资
 */

原理

自动装箱:把int类型包装成了包装器integer类型,基本数据类型转换成对应的包装器类型
自动拆箱:把Integer类型转换成int类型,包装器类型转换成对应的基本数据类型

jdk5之后的新功能

  1. 自动装箱,自动拆箱
  2. 增强for循环(foreach)
  3. 枚举

jdk7以后的功能

switch...case 可以用string

自动装箱

public class Ch04 {
    public static void main(String[] args) {
        String s = "1997";
        //自动装箱
        Integer i = Integer.parseInt(s);

    }
}

标签:20,07,int,s1,str,2022,abcdefg,字符串,String
来源: https://www.cnblogs.com/lurui711/p/16499993.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有