2022-07-20 第八组 卢睿 学习心得
作者:互联网
Java
今日重点
- String字符串
- 比较字符串的方法
- 字符串的长度
- 取出指定下标位置的字符
- 判断字符串是否存在
- 字符串的截取
- 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方法:
- 需要传参,传String类型的参数
- 有返回值,返回值是boolean类型的
- 访问权限public
长度
字符串 字符拼成的串
下标(索引)从0开始
length方法:
- 不需要方法
- 有返回值,整型int
- 访问权限public
String s1 = "abcdefg";
System.out.println(s1.length());
面试题:
字符串获取长度的方法和数组获取长度有什么区别?
- 数组的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之后的新功能
- 自动装箱,自动拆箱
- 增强for循环(foreach)
- 枚举
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