String类的使用

package Day12;
//String方法的使用
import java.util.Scanner;
public class Test_08 {

	//sop是方法(),作用是输出打印
	public static void main(String[] args) {
	//1.1 返回此字符串的长度。
	sop("123456".length());
	
	//1.2 根据位置 获取该位置上的某个字符, 
	//超过当前长度 异常 java.lang.StringIndexOutOfBoundsException:
	sop("1w3".charAt(1));//从0开始的
	
	//1.3 根据字符获取该字符在字符串中的位置
	sop("你的美".indexOf("美"));//显示"角标"值
	sop("com. eq".indexOf('o'));//空格也算1位
	sop("com. eq".indexOf('v'));//找不到返回-1
	sop("hello world".indexOf('w', 5));//根据位置查找值
	//第一个参数:你要找的字符;第二个参数:从什么位置开始找(包含当前位置)
	sop("hello world".indexOf("ll"));
	//返回一个位置,当前子串第一次出现的位置(即第一个字母的位置)
	
	//2.1字符串中是否包含某一个子串
	//true 包含 false 不包含
	sop("2.1字符串中是否包含某一个子串:"+"好的".contains("的"));
	
    /* indexOf(str) 如果返回-1 表示该str不在字符串中存在,
	也可以用于判断是否包含指定字符串
	if(str.indexOf("aa") !=-1) 既可以判断 又可以获取出现的位置 */
	if("ni美".indexOf("美")!= -1){
		System.out.println("YSE存在");
	}else{
		System.out.println("NO不存在");
	}
	
	//2.2 判断当前字符串是否为空 isEmpty()当前字符串中没有元素
	// 空 不是 null;true 空;false 不空
	sop("aa".isEmpty());
	
	//2.3 字符串是否以指定的内容开始 / 结尾
	sop("www.baidu.com".startsWith("www"));
	sop("www.baidu.com".endsWith("comw"));
	
	//2.4 比较两个字符串是否相等 忽略大小写
	sop("ABC".equals("abc"));//false 分大小写
	sop("ABC".equalsIgnoreCase("abc"));//true不分大小写
	
	//3.1 将字符数组转成字符串
	char[] arr={'a','b','c','d','e','f','g'};
	String s=new String(arr);//创建个String对象,把数组传进来
	sop(s);
	String s2= new String(arr,0,3);//从0角标开始 取3个
	sop(s2);
	
	//3.2 将字符串转成字符数组
	String ss="123000";
	char[] arr2 =ss.toCharArray();
	System.out.println(ss.valueOf(arr2));//char类型输出字符串
	//System.out.println(arr2.toString());//输出地址值
		for(int i=0;i<arr2.length;i++){
		sop(arr2[i]);
		}
	
	//4.1 替换字符串中的旧的字符
	String s4 ="abcanasdldrwdfadsasf";
	String s5=s4.replace('a', '0');//把所有a变0
	sop(s5);//如果要替换的字符不存在,返回的还是原串
	
	//4.2 替换字符串中的旧字符串
	sop("北京欢迎你".replaceAll("北京", "中国"));
	
	//切割
	String s6 = "ABC,DEF,GHT";
	String[] arr3=s6.split(",");//切割掉你不要的字符
	for(int i=0;i<arr3.length;i++){
		sop(arr3[i]);
	}
	
	//截取
	//默认 包含头 不包含尾
	sop("你好啊!!!".substring(2));//(截取后面的)从1开始 包含头 不包含尾
	sop("你好北京啊!".substring(4, 6));//(始-终)第一个参数 开始位置 第二个参数 结束位置
	
	//截取整个字符串 substring(0,s.length())
	sop(s6.substring(0, 7));
	
	/*String trim() 
	返回一个字符串,它的值是字符串,任何前导和尾随空格删除,中间有空格不管 */
	sop("admin   ".trim());//因为空格也占一个位,如果账号后面输入了空格就无法登录,用这方法空格就会删除掉
	sop(s4.trim());//可以是String类型也可以是String类型值
	sop("  aaa   ".trim());//任何前导和尾随空格都删除
	
	//String toLowerCase() 
	//转换为小写
	sop("转换为小写:"+s6.toLowerCase() );
  
	//String  toUpperCase()
	//装换为大写 
	sop("装换为大写:"+s4.toUpperCase() );
	sop("abcmdfsad".toUpperCase());
  
	/*int compareTo(String anotherString)  按字典顺序比较两个字符串。 
		字典顺序 也叫 自然顺序 默认就是ASCII的顺序进行比较

		如果参数字符串等于此字符串,则返回值 0; 
		如果此字符串按字典顺序小于字符串参数,则返回一个小于 0 的值;
		如果此字符串按字典顺序大于字符串参数,则返回一个大于 0 的值。

		= 0 当前字符串和参数字符串 一致(相等)
		< 0 当前字符串小于参数字符串
		> 0 当前字符串大于参数字符串

		A-Z 65 - 90
		a-z 97 - 122
		1   49          */
	sop("A".compareTo("A") );// 97-65= 32
	sop("Are you ok?".compareTo("are you ok?"));//A65, a97, 97-65=-32
	
	String s7 ="aaa";//a是97\97   
	String s8 ="a1c";//97\49       s7(max) s8(min)
	sop(s7.compareTo(s8));//48 逐个字符进行比较 第一个相等 比第二个 
	
	//TreeSet 集合 
	//拼接两个字符串 "+" 会返回一个新的字符串
	sop("123".concat("456"));
	
//	System.out.println(ss.length());
//	if(ss.length()>=6 && ss.length()>=1){
//		System.out.println("设置密码完毕");
//	}else{
//		System.out.println("密码长度不符合");
//	}
//System.out.println(ss.length()>=6 && ss.length()>=1 ? "设置密码完毕":"密码长度不符合");
	}
	public static void sop(Object obj){
		System.out.println(obj);
	}
}

课堂笔记


个人:equals输出的是true和falsh,hashCode输出的是数值


1.Object类中的方法
1.1 equals()
注意:当此方法被重写时,通常有必要重写hashCode()方法
以维护hashCode()方法的常规协定
该协定声明相等对象必须有相等的哈希码
1.2 hashCode()
public int hashCode()
如果根据 equals(Object) 方法,两个对象是相等的,那么对这两个对象中的每个对象调用 hashCode 方法都


必须生成相同的整数结果。 
如果根据 equals(java.lang.Object) 方法,两个对象不相等,那么对这两个对象中的任一对象上调用 


hashCode 方法不 要求一定生成不同的整数结果。但是,程序员应该意识到,为不相等的对象生成不同整数结果可以提高哈希表


的性能。 

注意:当equals方法被重写 往往也要重写hashCode()方法
协定:
1.当 obj1.equals(obj2) 为true时
obj1.hashCode() == obj2.hashCode()必须为true
2.当 obj1.equals(obj2) 为false时
obj1.hashCode() == obj2.hashCode()必须为false
1.3 toString()
java 认为所有对象不仅具备比较性 还能以字符串的形式打印出来
public String toString()
可以更加方便的显示属性值
默认情况下 Object类中的toString 打印类型+@+地址值


2.内部类
将一个类定义在另一个类的里面 里面那个类就称为内部类(内置类 嵌套类)


2.1.成员内部类
内部类访问特点:
语法:
外部类名.内部类名 变量名 = 外部类对象.内部类对象
Outer.Inner oi = new Outer().new Inner();
特点:
1.内部类可以直接访问外部类的成员 包括私有的
2.外部类如果想要访问内部类的成员,必须创建对象
//当类为内部类的时候 可以使用private修饰 因为它是外部类的成员
//当内部类被私有修饰后 就不能在外部其他类中创建对象了
2.2.静态内部类
当内部类被static修饰后 只能直接访问外部类中的static成员 出现了访问局限性
语法: 
外部类名.内部类名 变量 = 外部类名.内部类对象();
Outer.Inner oi = new Outer.Inner();
特点:
如果内部类中 定义了静态成员 那么这个内部类也得是静态的
2.3.局部内部类
在局部内部类 访问 它所在的局部变量时 只能访问被final修饰的 jdk1.8 新特性 取消了final修饰

局部内部类在访问它所在的方法中的局部变量必须是final修饰 为什么?
因为,当调用这个方法时,局部变量如果没有用final修饰,
它的生命周期和方法的生命周期一样,当方法弹栈,这个局部变量也会消失
那么 如果局部内部类对象还没有马上消失 想要使用这个局部变量 就没有了


如果用final修饰 会在类加载的时候进入常量池
即使方法弹栈 常量池的常量还在 也可以继续使用

2.4.匿名内部类
匿名内部类其实就是内部类的简写格式


if...else 转换成三元运算符 必须要有结果才能转换


想要简化代码 必须有前提


前提条件: 内部类必须继承一个类 或者 实现接口


格式:
new 类名或者接口名(){


重写方法


}.调用重写的方法();


本质:
是一个继承了该类 或者 实现了该接口的子类匿名对象
匿名内部类中定义的方法 最好不要超过3个
3.基本数据类型包装类
基本数据类型 作为属性的默认值 包装类型 包装类型的默认值
byte 0Byte null
short 0Short null
int 0Integer null
long 0Long null

float 0.0Float null
double 0.0 Double null


char ' ' 或 '\u0000'Character null


boolean false Boolean null

(基本数据类型不能调用方法,引用数据类型可以调用方法)
基本数据类型互相兼容的关系
基本数据类型对应的包装类类型 不存在任何关系 (一点点关系 就是都是Number类的子类)


1.基本数据类型 和 基本数据类型包装类之间的转换


装箱:
将基本数据类型封装为对应的包装类的过程
语法:
若 jdk版本>=1.5 自动装箱


包装类型 对象 = 基本数据类型;


jdk版本<1.5 手动装箱


包装类型 对象 = new 包装类型(基本数据类型);

拆箱:
将包装类拆成基本数据类型


语法:
若 jdk版本>=1.5 自动拆箱


基本数据类型 变量名 = 包装类型的对象;


若 jdk版本<1.5 手动拆箱


基本数据类型 变量名 = 包装类型对象.XXXValue();
/*
当发生自动装箱时 编译器自动调用了Integer valueOf(int i)方法 得到相应的包装器对象

当发生自动拆箱时 编译器自动调用了xxxValue()方法


javap -c 类名 反编译命令 可以看到编译过程




**:在包装类型里 ==比较的是地址值是否相等,equals比较的是值是否相等
*/


2.包装类中的部分方法


基本数据类型转成字符串
1. 基本数据类型+"" 
2. 基本数据类型包装类.toString(基本数据类型值)
Integer.toString(34);
字符串转成基本数据类型
web阶段 文本框 前端输入的都是String类型
static int parseInt(String s) 
3.==的陷阱



== 在java中比较对象时 永远是比较对象的地址值 这一点绝不会错
分析一下:
test方法的参数 是Integer类型
执行test(100,100) 首先会先执行 Integer a = 100 Integer b = 100
然后再执行方法体 比较a 和 b 的地址值是否相同


Integer在自动装箱时 调用了 valueOf()方法
如果 int 类型值 落在 范围之间
-128 ~ 127 之间 byte 
就不创建新的对象了 
如果不在这个范围之内 就创建新对象 


最常用的功能 就是 基本数据类型 和 字符串类型之间的转换


4.String / StringBuffer / StringBuilder


String 所有类中用的最频繁的类
String 特性:
字符串最大的特点 一旦被初始化就不可以被改变 -->字符串常量
String s = "abc";
s 是一个类类型变量
"abc" 是一个对象
字符串是常量;它们的值在创建之后不能更改。字符串缓冲区支持可变的字符串。


String  s = "abc";
// =左边是引用类型,右边是地址值,改 变和指向改变



String(String original) 
          初始化一个新创建的 String 对象,
 使其表示一个与参数相同的字符序列;
 换句话说,新创建的字符串是该参数字符串的副本。


//常量池 其实存的是char型的数组
//常量池(constant pool)指的是在编译时期被确定,并被保存在已编译的.class文件中的一些数据
//它包括了 关于类 方法 接口等中的常量 也包括字符串常量 


常用方法有那些?


1,获取
1.1 返回此字符串的长度。
int length()
1.2 根据位置 获取该位置上的某个字符
char charAt(int index) 
1.3 根据字符获取该字符在字符串中的位置
int indexOf(int ch)  接收的是int ASCII码 返回的是ch在字符串中第一次出现的位置
int indexOf(1, int fromIndex) 从fromIndex指定位置开始 获取ch在字符串中第一次出现的


位置
int indexOf(String str) 返回的是str在字符串中第一次出现的位置 
2,判断
2.1 字符串中是否包含某一个子串
   boolean contains(str)
2.2 字符串中是否有内容
   boolean isEmpty() 原理就是判断长度是否为0
2.3 字符串是否以指定的内容开始
   boolean startsWith(str)
2.4 字符串是否以指定的内容结束
   boolean endsWith(str)
2.5 比较两个字符串是否相等
   boolean equals(String str)
2.6 比较两个字符串是否相等 忽略大小写
   boolean equalsIgnoreCase(String anotherString) 
 
3,转换
3.1 将字符数组转成字符串
   构造函数
        String(char[] ch)
String(char[] value, int offset, int count)  从 offset开始 取 count个
   静态方法
static String copyValueOf(char[] data) 
3.2 将字符串转成字符数组
char[] toCharArray() 
3.3 将基本数据类型转成字符串
static String valueOf(int i)  
 
4,替换
4.1
String replace(char oldChar, char newChar) 
String s = "hello java";
Stirng s2 = s.replace('p','n');
//将 p 替换成 n 如果要替换的字符不存在 返回的还是原来的字符串
因为字符串 一经创建就不会改变 replace后 生成的是一个新的字符串
5,切割
String[] split(String regex) 
6,截取
String substring(int beginIndex) 
String substring(int beginIndex, int endIndex) 
 
7,转换
大小写转换
String toLowerCase() 
String toUpperCase() 
去除两端的空格(半角空格)
String trim() 
8,比较
int compareTo(String anotherString)  按字典顺序比较两个字符串。 
字典顺序 也叫 自然顺序 默认就是ASCII的顺序进行比较


如果参数字符串等于此字符串,则返回值 0; 
如果此字符串按字典顺序小于字符串参数,则返回一个小于 0 的值;
如果此字符串按字典顺序大于字符串参数,则返回一个大于 0 的值。


= 0 当前字符串和参数字符串 一致(相等)
< 0 当前字符串小于参数字符串
> 0 当前字符串大于参数字符串


A-Z 65 - 90
a-z 97 - 122
1   49


9,拼接字符串
拼接两个字符串 "+" 会返回一个新的字符串
String concat(String str) 将指定字符串连接到此字符串的结尾。
 


 
 
 


 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值