8、JAVA基础&字符串
String 类
字符串的特点:
1、java中用String类来描述字符串。
2、字符串一但初始化就不可以被改变,因为是个常量。所以可以被共享
String s = "abc";// 定义一个类类型的变量s指向了一个字符串对象
String s2 = new String("abc");
这两个是有差别的,s对应的字符串在字符串缓冲池中。
当我们定义s2后此时在堆内存中创建了一个字符串对象,然后把缓冲池中的内容存放到对象中。
如何创建字符串对象呢?
1,直接使用 "".String s = "abc";
2,将一个字节数组或其中的部分变成字符串。
3,将一个字符数组或其中的部分变成字符串。
将数组变成字符串,可以用字符串构造函数来完成
String( char [] value ) 将字符数组转换成字符串
/*
* 字符串的特点:
* 1,java中用String类来描述字符串。
* 2,字符串一但初始化就不可以被改变。因为是个常量。
*/
String s = "abc";//定义一个类类型的变量 s 指向了一个字符串对象。
String s1 = "abc";
System.out.println(s == s1);//true
String s2 = new String("abc");
System.out.println(s == s2);//false;
System.out.println(s.equals(s2));//String类的equals覆盖了Object中的equals方法,
//用来判断字符串对象的内容是否相同。
String a = "abcd";
String a1 = "ab";
String a2 = "cd";
String b = a1+a2;
String c = "ab"+"cd";
System.out.println("a==b:"+(a==b));
System.out.println("a==c:"+(a==c));
按照面向对象的思考方式来思考字符串对象的功能。
1,获取;
1.1 获取长度。
int length();
1.2 获取字符串中的字符。
char charAt(index);
1.3一个字符或者一个字符串在一个字符串的中的位置。
int indexOf(ch)
int indexOf(string)
int indexOf(ch,fromIndex)
int indexOf(string,fromIndex)
int lastIndexOf(ch);
这些获取索引位的方法,如果没有要查找的内容,返回-1.
所以这个方法还有另一个应用,就是判断字符或者字符串是否存在。
1.4获取部分字符串。
String substring(begin,end);包含头,不包含尾。
2,判断。
2.1 是否包含指定的字符串。
boolean contains(string);
2.2 是否是以指定的字符串开头。
boolean startsWith(string);
2.3 是否是以指定的字符串结尾。
boolean endsWith(string);
2.4忽略大小写判断字符串内容。
boolean equalsIgnoreCase(string);
3,转换。
3.1 将字符串转成大小写。
String toLowerCase();
String toUpperCase();
3.2 将字符串转成数组。
byte[] getBytes();//字节数组。
char[] toCharArray();//字符数组
3.3 将字符串转成字符串数组。
String[]
3.4 将字符串中的中内容进行替换。
String replace(ch1,ch2);
String replace(string1,string2);
3.5 去除字符串两端的空格。
String trim();
上午
StringBuffer 是一个容器
当要创建一个对象的时候,首先查阅API文档,看是否有
构造函数存在,如果有才能创建,否则无法创建此类的实例对象
字符串缓冲区的特点:
1、用于存储数据的容器。
2、该容器的长度是可变的。
3、该容器可以存储基本数据和引用数据类型
append() 支持常见数据类型 但是不能直接添加 byte 和 short
常见创建容器对象
StringBuffer sb = new StringBuffer();
既然是容器
应该具备一些常见的功能
1、添加数据
StringBuffer s1 = sb.append("ab"); 太烂了
StringBuffer s1 = sb.append("cd");
常用
sb.append("ab").append("cd"); 方法链调用
append是在结尾追加数据,前面数据和此时添加数据变成一个字符串
insert() 插入数据, StringBuffer insert(index , data) 根据指定的位置插入data数据
当前位置上的数据会被顺延。
2、删除数据
delete( int start , int end ) 一般有头有尾的参数,一般都是包含头不包含尾
清空缓冲区
sb.setlength(0);
StringBuffer sb = new StringBuffer();从新开辟了一个缓冲区
sb.delete(0.sb.length); 最合理
3、查找数据
char charAt(int index);
int indexOf(String str);
indexOf(String str, int fromIndex)
4、修改数据
setCharAt(int index, char ch);
replace(int start,int end,String str);
reverse();字符串换反转
可变数组的原理:
字符串缓冲区和数组的区别:
1、 数组是固定长度
字符串缓冲区是可变长度
2、数组中的元素类型是固定同一类型
字符串缓冲区的元素类型是任意类型,也可以是用一类型
3、数组对象,只有一个length属性,然后通过角标操作数组的元素
字符串缓冲区是通过一系列的方法(怎删改查)来炒作缓冲区中的元素
4、数组中的元素,通过角标直接访问使用
字符串缓冲区的元素通常经过操作后,都要通过toString变成字符串使用。
StringBuilder 是JDK1.5 以后才出现的
是可以替代 Stringbuffer 的
但是他是线程不同步的,StringBuffer是线程同步的
虽然它在多线程时不安全,但是在单线程时效率高
StringBuilder 和 StringBuffer 的用法一模一样
对于java的升级无外乎是哪个原因:
1、提高效率
2、简化书写
3、提高安全性
基本数据类型包装成类
byte Byte
short Short
int Integer
long Long
float Float
double Double
char Character
boolean Boolean
把基本数据类型封装成对象有什么好处呢?
可以吧对象中的定义更多的属性和行为对基本数据值进行操作
比如,整数的范围。如果整数被封装成对象,那么整数的取值范围,当然是整数对象自己最清楚
所以只要调用对象中的属性和行为就可以了。
基本数据类型包装类,它的最常见作用之一:完成基本数据和字符串之间的转换
完成字符串格式数值转成整数
Integer.parseInt("23"+4);结果27
对于其他数据类型的字符串转换方式都一样
xxx a = Xxx.parseXxx(Xxxstring);
int a = Integer.parseInt("23");
但是需要注意有一种类型没有转换
Character
怎么将整数转成字符串呢?
int num = 4;
String s = num + "";
String s = Integer.toString(num);
怎么将一个整数值封装成对象呢?通过构造函数.还可以通过静态方法valueOf的形式
Integer i1 = new Integer(4);
Integer i2 = new Integer("4");
sop(i1==i2); false
sop(i1.equals(i2)); true
怎么将整数对象装成整数呢?
使用 intValue方法
int y = i1.intValue()
将其他进制转换成十进制
int x = Integer.parseInt("110",2);
sop(x+1);
在1.5版本后对基本数据类型对象包装类进行升级,可以像操作解一般数据类型一样,操作包装类型数据
这就是升级中的简化书写
但是需要注意,在使用简写时,要注意z可以的取得值中多了一个null
如果自动装箱的数据在byte范围之内,同样的数据不在开辟空间
基本数据用大小与符号比较
对象比较用compareTo比较