String
1.赋值方式
①直接赋值:
String Name1 = "Grit";
②通过创建新的对象来赋值:
String Name4 = new String ("Grit");
区别:
对于①存在共享内存(值相同,从而存放值相同,出现这种的现象的原因,是存在常量池);/节省内存
对于②每次都是创建新对象,即使值相同,地址也不会相同。
2.String类常用方法
2.1判断开头结尾
String name = "Grit" ;
System.out.println(name.startsWith("G"));//判断是否以G开头
System.out.println(name.endsWith("t"));//判断是否以t结尾
System.out.println(name.length());//获取字符有多少个字符串
运行结果:
2.2长度以及去掉两端空格
//如果在中间及两边加上空格
String name = " Gr it ";
System.out.println(name.length());
name = name.trim();//去掉字符串两端空格
System.out.println(name.length());
运行结果:
可见:①空格也算长度②变量.trim();只能去掉两端空格,中间的去不掉;
2.3去除符号
String numbers = "110#120#114#119";
String [] strs = numbers.split("#");//将字符串进行分割,分割之后结果是 {"","","",}返回值是数组类型,所以需要定义一个String类型的数组,来接收返回后的数组。
for(String str : strs) { //for-each循环 for(数据类型 新变量:旧变量)
System.out.println(str);
}
运行结果:
2.4 替换
String numbers = "110#120#114#119";
numbers = numbers.replaceAll("#", "@");//将所有#替换成@,注意不能涉及$
System.out.println(numbers);
结果:
同理我们可以用replaceAll 来去除所有空格
String numbers = " 110 120 114 ";
numbers = numbers.replaceAll(" ", "");
System.out.println(numbers);
System.err.println(numbers);//输出颜色为红色,有时候会错乱顺序;
结果:
2.5获取指定位置的字符
String letters = "一二三四五六日";
int day = 1 ;
// System.out.println(letters.charAt(0));//获取指定位置的字符,从0开始
String week = "星期"+"一二三四五六日".charAt(day-1);
System.out.println(week);
通过获取指定位置的字符,可以引申到获得星期几;
结果:
2.6截取
String letters = "ABeBa";
letters = letters.substring(0);//从指定位置截取字符串,从0开始;
System.out.println(letters);
//重载的方法
String letter = "ABeBa";
letter = letter.substring(0,2);//从指定位置截取字符串,至指定位置结束(不包含这个数);
System.out.println(letter);
运行结果:
可以拿来做身份证截取出生年月等;
同时:
Integer.parseInt(letter);//Integer是int的包装类,parseInt() 方法用于将字符串参数作为有符号的十进制整数进行解析。所以该用法为强制类型转换,将字符串转换为Int型。
2.7查找字符所处的顺序
String letters = "ABeBA";
int position = letters.indexOf("A");//获取字符串的位置,返回值是Int类型的
System.out.println(position);
position = letters.indexOf("AB");//结果还会是0
System.out.println(position);
//从后往前找的
position = letters.lastIndexOf("A");
System.out.println(position);
结果:
可以用来获得“.”的位置,从而结合substrting 来截取拓展名。
3. “==”与 String类中 equals方法
3.1 “==”
如果基本数据类型,比较的是值是否相等;引用类型比较地址是否相等;
实例代码:
int a = 1 ;
int b = 1 ;
System.out.println(a==b);
Test t1 = new Test();
Test t2 = new Test();
System.out.println(t1==t2);
3.2 equals
Object 类 中 equals 比较的是地址是否相同;
String类中equals方法:比较内容是否完全相同;(大小写也需要区分)//先比较地址,再比较是否为String,再逐字比较;
//①比较地址
String name1 = "Grit";
String name2 = "Grit";
System.out.println(name1.equals(name2));
//②比较类型是否相同,为String类
Date date = new Date();
Object obj = date;
System.out.println(name1.equals(date));
//③逐字比较
String name3 = new String ("Grit");
System.out.println(name1.equals(name3));
//如果大小写不同
String name4 = "GRIT";
System.out.println(name1.equals(name4));
//忽略大小写比较
String name5 = "GRIT";
System.out.println(name1.equalsIgnoreCase(name5));//equalsIgnoreCas是忽略大小写比较
对应结果:
4.StringBuffer
如果用普通方法,进行拼接
String letters = "a";
letters = letters + "a";
letters = letters + "a";
letters = letters + "a";
letters = letters + "a";
letters = letters + "a";
问题:每执行一行代码,则创建一个新的String类型对象
(阿里巴巴规定,三个及以上不可以用普通拼接方式)
StringBuffer的用法及优点
StringBuffer sb = new StringBuffer("a");
sb.append("a");
sb.append("a");
sb.append("a");
sb.append("a");
sb.append("a");
优点:程序执行完之后,还是一个对象
5.toString
toString(); Object类 中的用于输出地址;
直接输出对象,实质输出的是该对象调用toString方法的返回值;
作业:
1.
思路:直接用split即可
public class c1 {
public static void main(String[] args) {
String name = "卡巴斯基#杀毒软件#免费版#俄罗斯";
String nam [] = name.split("#");
//用Split分割完后,是以数组方式存储,所以需要定义一个数组来存储
//接下来用 for each 循环进行遍历
for (String nam1 : nam) {
System.out.println(nam1);
}
}
}
结果:
2
思路:通过substring 进行截取;其中需要用到求余运算;截取的是16-17位;(因为第一个数字代表开始截取的位置,第二个数字代表终止的位置(不包含这个数))
public class c2 {
public static void main(String[] args) {
String Id = "411330199909099892";
int Sex = Integer.parseInt(Id.substring(16,17));
if (Sex % 2 ==0) {
System.out.println("是女孩");
}
else {
System.out.println("是男孩");
}
}
}
结果:
3
思路:
首先是需要得到输入的值,这个本次课程并没有涉及到,所以需要去查资料,
查阅得到
import java.util.Scanner;
Scanner s = new Scanner(System.in);
long n =s.nextLong();
上面就是提取,和键入long类型的示例。
对应键入类型:
int——int num = s.nextInt();
float——float num = s.nextFloat()
String——String str = s.nextLine();
那么总共需要键入三次,用户名长度不少于6位,密码不少于8位,且两次密码需要一致;
长度位数 可以用 .length 获得
比较密码的话可以用 .equal获得
package com.jd.test;
import java.util.Scanner;
public class c3 {
public static void main(String[] args) {
//获得ID
System.out.print("请输入您想要注册的ID:");
Scanner a = new Scanner(System.in);
String Id = a.nextLine();
if(Id.length() <6 ) {
System.out.println("您的注册Id不符合规则,请重新注册");
return;
}
else {
System.out.print("请输入您想要注册的密码:");
Scanner b = new Scanner(System.in);
String M1 = b.nextLine();
if(M1.length() < 8) {
System.out.println("您的注册密码不符合规则,请重新注册");
return;
}
else {
System.out.print("请再次输入您想要注册的密码:");
Scanner c = new Scanner(System.in);
String M2 = c.nextLine();
if (M2.length() < 8) {
System.out.print("您的注册密码不符合规则,请重新注册");
return;
}
else {
if (M1.equals(M2)) {
System.out.println("您已注册成功");
System.out.println("您的账号为:" + Id);
System.out.println("您的密码为:" + M1);
}
else {
System.out.print("您两次注册密码不一致,请重新注册");
return;
}
}
}
}
}
}
为方便起见,均以9个“a”,作为标准
运行结果:
1.均正确
2.账号不符合
3.账号符合,密码不符合
4.账号符合,密码不一致
后记:
作业写得有点久,早上起得有点晚
中午午休之后 又去健身房了
代码写着需要现翻上边的笔记
但是运行起来没什么问题
也刚好把前边的格式改了改
前记统一删除掉,这样就能直接找到对应的东西
而且 老写想法,搞得跟日记一样杂
要做一个 认真学习代码的小菜鸡
不要一天天呢么多抱怨