1.关于String引用类型
问:类中有哪些结构?
属性 结构 构造器
探讨String类中是不是也有这些属性?
1)String s1="abcdefg";
String既然是一个类,s1应该叫做string类的对象
类如果要创建对象,new ,s1并没有new,s1也可以叫做对象
2)String s2=new String ("abcdefg");
s2是通过new创建出来的String类的对象
创建对象是要调用构造器 String s2=new String ("abcdefg");
s1指向的abcdefg和s2指向的abcdefg不在同一个区域内 双等号在字符串中,表示比较的是虚地址 虚地址:对象在内存中的存储位置 案例:
输出结果:
new出来的对象,地址一定不同,所以是s2和s3虚地址不同,s1与s2处于两个不同内存中,所以地址也不可能相等,而1和4则是处于统一内存。
2.String类的length方法:字符串中字符个数
1)不需要传参
2)有返回值,整型int;
3)访问权限public
一道面试题:字符串获取长度的方法和数组获取的方法有什么区别?
数组的length是属性,而字符串length()是方法
拓展:String 类常见方法
- equals:字符串是否相同
- equalsIgnoreCase:忽略大小写后字符串是否相同
- compareTo:根据字符串中每个字符的Unicode编码进行比较
- compareToIgnoreCase:根据字符串中每个字符的Unicode编码进行忽略大小写比较
- indexOf:目标字符或字符串在源字符串中位置下标
- lastIndexOf:目标字符或字符串在源字符串中最后一次出现的位置下标
- valueOf:其他类型转字符串
- charAt:获取指定下标位置的字符
- codePointAt:指定下标的字符的Unicode编码
- concat:追加字符串到当前字符串
- isEmpty:字符串长度是否为0
- contains:是否包含目标字符串
- startsWith:是否以目标字符串开头
- endsWith:是否以目标字符串结束
- format:格式化字符串
- getBytes:获取字符串的字节数组
- getChars:获取字符串的指定长度字符数组
- toCharArray:获取字符串的字符数组
- join:以某字符串,连接某字符串数组
- length:字符串字符数
- matches:字符串是否匹配正则表达式
- replace:字符串替换
- replaceAll:带正则字符串替换
- replaceFirst:替换第一个出现的目标字符串
- split:以某正则表达式分割字符串
- substring:截取字符串
- toLowerCase:字符串转小写
- toUpperCase:字符串转大写
- trim:去字符串首尾空格
3.charAt方法
1)想要键盘输入输出char类型
Scanner sc=new Scanner(System.in); char c=sc.next().charAt(0);
括号里是字符串中指定位置的下标
a的ASCII码为97,所以如果键盘输入a,输出的值为98
4.indexOf方法:
判断指定字符是否存在,返回值为字符串在s1的下标,如果不存在,返回-1;如果后面有重复的字符 indexOf(String,int )代表从int位置开始查找;包括当前位置
String s1="abcdefgabc";
5.案例:统计一个字符串在另一个字符串中出现的次数
分别用charAt和indexof方法
indexof:
public static void main(String[] args) {
String s1 = "abcdefgabcdaaa";
int index = s1.indexOf("b");
int sum = 0;
for (int i = 0; i < s1.length(); i++) {
if (index != -1) {
sum++;
index=s1.indexOf("b",index+1);
}
}
System.out.println(sum);
}
charAt:
public static void main(String[] args) {
String s1 = "abcdefgabcdaaa";
int sum = 0;
for (int i = 0; i < s1.length(); i++) {
if (s1.charAt(i) == 'b') {
sum++;
}
}
System.out.println(sum);
}
6.字符串的截取substring方法:
生成一个新的字符串,不会改变原有数据
String s = str.substring(1);
包含起始位置,不包含终止位置
s = str.substring(1,2);
System.out.println(s);
7.案例:
键盘上输入身份证号,
* 性别,生日。
* 2201221990090914567
进行封装
public String getGender(String cardId){
String gender = "男";
int genderNum =cardId.charAt(16);
if(genderNum % 2 == 0){
gender = "女";
}
return gender;
}
public String getBirthday(String cardId) {
return cardId.substring(6, 14);
}
public static void main(String[] args) {
char c = '7';
int i = c;
System.out.println(i);
Ch06_Demo c = new Ch06_Demo();
Scanner sc = new Scanner(System.in);
System.out.println("请输入身份证号:");
String cardId = sc.next();
if(cardId.length() == 18) {
String birthday = c.getBirthday(cardId);
String gender = c.getGender(cardId); String birthday = cardId.substring(6,14);
String gender = "男";
int genderNum =cardId.charAt(16);
if(genderNum % 2 == 0){
gender = "女";
}
System.out.println("身份证号为:" + cardId + ",生日:"
+ c.getBirthday(cardId) + ",性别:" + c.getGender(cardId));
}else{
System.out.println("输入有误,请重新输入!");
}
}
8.一些常见的String类方法
public static void main(String[] args) {
String str = "abcdEFG";
String str1 = " ABCDEFG ";
String str2 = "123,456,789,00";
// 转大写
System.out.println(str.toUpperCase());
// 转小写
System.out.println(str.toLowerCase());
// 判断是否以xxxx开头
System.out.println(str.startsWith("a",2));
// 判断是否以xxxx结尾
System.out.println(str.endsWith("F"));
// 忽略大小写进行比较内容
// 验证码
System.out.println(str.equalsIgnoreCase(str1));
// 去掉字符串前后的空格
System.out.println(str1.trim());
// 根据指定的字符分割,分割之后,分割条件是消失
String [] strings = str2.split(",");
// System.out.println(Arrays.toString(strings));
for (String string : strings) {
System.out.println(string);
}
}
9.字符串的替换replaceAll
String str = "hello";
System.out.println(str.replace('e', 'c'));
System.out.println(str.replaceAll("l", "i"));
10.包装器的作用:
自动装箱:把int类型包装成了包装器Integer类型
基本数据类型转换成对应的包装器类型
自动拆箱:把Integer类型转换int类型
包装器类型转换成对应的基本数据类型
JDK5之后的新功能:
1.自动装箱和自动拆箱
2.增强for循环(foreach)
3.枚举
JDK7以后的新功能:
1.switch...case 可以用String
*/
Integer i1 = 20;
Integer i2 = Integer.valueOf(50);
int ii = i2;
int ii2 = i2.intValue();
}
}
11.目前涉及到的异常
* 1.数组下标越界
* 2.内存溢出
* 3.空指针
* 4.字符串下标越界
* 5.数字格式化



