----------------------- android培训、java培训、java学习型技术博客、期待与您交流! ----------------------
java.lang.String类是对字符串事物的描述。
该类定义了专门用于操作字符串的方法。
API:(Application Programming Interface,应用程序编程接口)是一些预先定义的函数,目的是提供应用程序与开发人员基于某软件或硬件的以访问一组例程的能力,而又无需访问源码,或理解内部工作机制的细节。
1.String类的方法:
1:构造方法
字符串是一个常量,一旦创建,就不会更改,存放在方法区中的常量池中。
创建字符串对象,两种方式
String str1 = "abc"; //s1是一个类类型变量, "abc"是一个对象。
String str2 = "abc"; //字符串最大特点:一旦被初始化就不可以被改变。str2 ="k"
//"abc"对象没变,在常量池里还在 不必再开辟空间 s2变了,指向k
String str3 = new String("abc");
str1与str2使用的是同一地址空间,因为String使用的是常量池
而str3是new出来的,就相当于开辟了新的空间,地址也就跟str1,str2不一样的
String类复写了Object类中equals方法,用于判断字符串是否相同。
System.out.println(str1.equals(str2)); --true,地址一样,值也一样
System.out.println(str1.equals(str3)); --true,地址不一样,但是值一样
System.out.println(str1 = = str2); --true,地址一样,值也一样
System.out.println(str1 = = str3); --false,地址不一样,值一样,还是false
String s1 = "钓鱼岛";
String s2 = "钓鱼";
String s3 = "岛";
//变量,编译时期,没有值,运行时候,从新开内存空间
System.out.println(s1==(s2+s3));//false
//运算的是常量,固定不变的,编译时期,JVM已经确定了值是什么,运行时期不会开新的内存空间
System.out.println(s1==("钓鱼"+"岛"));//true
new String(char[]);//将字符数组转成字符串。
new String(char[],offset,count);//将字符数组中的一部分转成字符串。
String类的一般方法:
|-- 获取
|-- char charAt(int index)返回指定索引出的单个字符
|-- String substring(int start,int end)获取字符串中的一部分,包含头,不包含尾,返回新字符串
|-- int indexOf(int ch) 返回指定的字符在字符串中第一次出现的位置
|-- int indexOf(String s)返回指定的字符串在字符串中第一次出现的位置
|-- int lastIndexOf(int ch)反向索引,获取指定的字符在字符串中最后一次出现的位置
|-- int lastIndexOf(String s)反向索引,获取指定的字符串在字符串中最后一次出现的位置
|-- 判断,返回的都是布尔类型
|-- boolean equals()两个字符串的全等判断,完全一致,返回true,后期比较的常用
boolean equalsIgnoreCase(); 判断内容是否相同,并忽略大小写
|-- boolean contains()判断一个字符串是否在另一个字符串中,完全存在,返回true
indexOf(str):可以索引str第一次出现位置,如果返回-1.表示该str不在字符串中存在。所以,也可以用于对指定判断是否包含。if(str.indexOf("aa")!=-1)
而且该方法即可以判断,也可以获取出现的位置。
|-- boolean startsWith()判断一个字符串是否以另一个字符串开头
|-- boolean endsWith()判断一个字符串是否以另一个字符串结尾
|-- boolean isEmpty()如果字符串的长度是0,返回true return str.length()==0
|-- 转换
字符数组转成字符串
构造函数:String(char[])
String(char[],offset,count):将字符数组中的一部分转成字符串。
静态方法:
static String copyValueOf(char[]);
static String copyValueOf(char[] data, int offset, int count)
字节数组转成字符串
String(byte[])
String(byte[],offset,count):将字节数组中的一部分转成字符串。
字符串转成字符数组
char[] toCharArray()
字符串转成字节数组
byte[] getBytes():
将基本数据类型或者对象转成字符串
|-- static String valueOf(任意)
String s = String.valueOf(任意的)
|-- String toUpperCase()字符串转成大写,返回新字符串
|-- String toLowerCase()字符串转成小写,返回新字符串
|-- 其他
|-- int compareTo()按照字典顺序比较两个字符串,前面的大,返回正数,
相等返回0,前面的小,返回负数
|-- String[] split(字符串) 对字符串进行切割,返回字符串数组,原始字符串不变
|-- String replace(老串,新串)替换字符串,返回新的字符串,原始字符串不变
|-- String trim()去掉字符串的两端的空格
问题: "" 和null区别是什么?
""是一个具体的字符串对象,null是空常量
""调用String类中的方法,null是所有引用类型的公共值
2. StringBuffer 字符串缓冲区
是一个容器。字符串操作的缓冲区,提高字符串的操作效率。
底层实现是可变的数组结构。初始容量为 16 个字符。
特点:
1,长度是可变化的。
2,可以直接操作多个数据类型。
3,最终会通过toString方法变成字符串。
String toString()将缓冲区变成字符串对象
增删改查C create U update R read D delete
1,追加
StringBuffer append(任意类型) 将任意类型数据作为参数添加到已有数据结尾处。
return this; 方法运行后的结果是StringBuffer对象StringBuffer insert(index,数据):可以将数据插入到指定index位置。
练习:
public static void method_add(){
StringBuffer sb = new StringBuffer();
//sb.append("abc").append(true).append(34); //称之为方法的调用链,方法的运行结果还是本类的对象,链式编程
// StringBuffer sb1 = sb.append(34);
// sop("sb==sb1:"+(sb==sb1)); //true
sb.insert(1,"qq"); //aqqbctrue34
//sop(sb.toString());//abctrue34
//sop(sb1.toString());
}
StringBuffer可变对象,String不可变对象
class StringBufferDemo{
public static void main(String[] args) {
StringBuffer sb1 = new StringBuffer("abc");
StringBuffer sb2 = new StringBuffer("bcd");
method(sb1, sb2);
System.out.println(sb1); //abcbcd
System.out.println(sb2); //bcdabcbcd
}
public static void method(StringBuffer sb1,StringBuffer sb2){
sb1.append(sb2);
sb2.append(sb1);
}
}
2,删除
StringBuffer delete(int start, int end):删除缓冲区中的数据,包含start,不包含end。
StringBuffer deleteCharAt(index):删除指定位置的字符。
// sb.delete(0,sb.length()); //清空缓冲区。
3,获取(查)
char charAt(int index)
int indexOf(String str)
int lastIndexOf(String str)
int length()
String substring(int start, int end)
4,修改
StringBuffer replace(start,end,string);
void setCharAt(int index, char ch) ; 修改某个字符
练习
public static void method_update(){
StringBuffer sb = new StringBuffer("abcde");
// sb.replace(1,4,"java"); //替换3个 ajavae
sb.setCharAt(2,'k');
sop(sb.toString());
}
其他动作:
5,反转
StringBuffer reverse();
6,将缓冲区变成字符串
String toString()将缓冲区变成字符串,可以使用String对象中的方法
7,将缓冲区中指定数据存储到指定字符数组中
void getChars(int srcBegin, int srcEnd, char[] dst, int dstBegin)
练习
public static void main(String[] args) { StringBuilder sb = new StringBuilder("abcdef");
char[] chs = new char[6];
sb.getChars(1,4,chs,1);//将chs中字符串从脚标1取3位 放到数组中 从脚标1开始
for(int x=0; x<chs.length; x++){
sop("chs["+x+"]="+chs[x]+";");
}
}
3.JDK1.5 版本之后出现了StringBuilder
完全一样的方法,但是StringBuffer线程安全。
StringBuilder线程不安全,效率高。
单线程的程序,推荐使用StringBuilder
Java升级三个因素:
1,提高效率。2,简化书写。3,提高安全性。
基本数据类型对象包装类 重点
基本数据类型有8种,对象的包装类,有8个类
将基本数据类型封装成对象,提供更多的方法,和属性
好处:
1:可以通过对象中的属性和行为操作基本数据。
2:可以实现基本数据类型和字符串之间的转换。
基本数据类型对象包装类:
byte Byte
short Short
int Integer
long Long
boolean Boolean
float Float
double Double
char Character
重点研究java.lang.Integer
4.1基本数据类型转成字符串
(a) 基本数据类型+""
(b) 基本数据类型.toString(基本数据类型值);
如: Integer.toString(34);//将34整数变成"34";
4.2字符串转成基本数据类型
(a) parseInt //例如文本框的年龄换成数字
xxx a = Xxx.parseXxx(String); 静态调用
例如:int a = Integer.parseInt("123");
boolean b = Boolean.parseBoolean("true");
(b) int intValue()将Integer构造方法中包装的字符串,转成int类型,必须是数字格式的字符串
Integer i = new Integer("123"); 对象调用方式
int num = i.intValue();
4.3 进制转换
十进制转成其他进制
转成二进制:toBinaryString
转成八进制:toOctalString
转成十六进制:toHexString
其他进制转成十进制。
parseInt(string,radix);
例如:int x = Integer.parseInt("3c",16);
sop("x="+x);
4.4 JDK1.5新特性---自动装箱和自动拆箱
|-- 自动装箱,就将基本数据类型封装成对象
|-- 自动拆箱,将封装成对象的基本数据类型,转成基本数据类型
Integer x = new Integer(4);可以写成下面的格式
Integer x = 4;//自动装箱。//这里的4相当于new Integer(4)
//这里的x不能为null 否则下面的x.intvalue 无法用 会造成异常
x = x/* x.intValue() */ + 2;
//x+2: x进行自动拆箱x.intValue(),变成成了int类型。和2进行加法运算。再将和进行装箱赋给x。
练习
Integer a = new Integer(20);
Integer b = new Integer(20);
//System.out.println(a==b);//false 指向的new Integer,地址不同
//System.out.println(a.equals(b));//true Integer中复写了equals
Integer aa = 127;//装箱时数据在byte范围内,数值相同JVM不开辟内存空间 // bb=aa 相同的引用指向的是同一个对象
Integer bb = 127;
System.out.println(aa==bb);//T
System.out.println(aa.equals(bb));//T
----------------------- android培训、java培训、java学习型技术博客、期待与您交流! ----------------------