黑马程序员_java学习日记_String类的常见用法
------- android培训、java培训、期待与您交流! ----------
?
1、注意:String s1 ="abc"?? 注意:s1是一个类类型的变量,“abc”字符串是一个特殊的对象。
?
字符串最大的特点,一旦被初始化就不可以改变了。改变的是地址。s1 ="ok"这个是改变的地址。
?
2.字符串有自己的独特方式,判断内容是否相同。
?
?? String类复写了Object类中的equels()方法,该方法用于判断字符串是否相同,
?
? String s1 ="abc"和String s1 = new String("abc");有什么区别。
?
? s1在内存中有一个对象。
?
? s2在内存中有两个对象。
?
3、字符串里面的方法;
?
?? 获取:
?
?? 1)获取字符串的长度: int length();方法。而获取数组里面的长度用的.length是属性不是方法。
?
?? 2)获取某个位置上的字符:char charAt(int index);
?
?? 3) 获取字符串的位置;
?
????? int indexof(int ch);返回ch在字符串中第一次出现的位置。
?
????? int indexof(int ch,int fromIndex),从fromIndex指定位置开始,获取ch在字符串中第一次出现的位置。
?
????? int indexOf(String str) ;反回str在字符串中第一次出现的位置。
?
????? int indexof(String str,int fromIndex);从fromIndex指定位置开始,反回str在字符串中第一次出现的位置。
?
?? 4)反向索引字符串:
?
????? int lastIndexof(int ch);返回ch在字符串中最后一次出现的位置。
?
????? int lastIndexof(int ch,int fromIndex),从fromIndex指定位置开始,获取ch在字符串中最后一次出现的位置。
?
????? int lastIndexof(String str) ;反回str在字符串中最后一次出现的位置。
?
????? int lastIndexof(String str,int fromIndex);从fromIndex指定位置开始,反回str在字符串中最后一次出现的位置。
?
?? 判断:
?
??? 1)字符串中是否包含某一个字串.
?
??? boolean contains(str);
?
??? 特殊之处:indextof(str):可以索引str第一次出现的位置,如果返回-1,表示该str不在字符串中存在
?
???????注意;indextof(str)该方法既可以判断包含关系,又可以判断出现的位置。
?
??? 2)字符串中是否有内容:
?
?????? boolean isEmpty()? ;原理就是判断长度是否为0.
?
??? 3)字符串是否与指定位置结尾:boolean endsWith(String suffix)
?
?????? 字符串是否与指定位置开头:boolean endsWith(String suffix)
?
?????? 判断字符串的内容是否相同 boolean equals(Object str)
?
?????? 判断字符串的内容是否相同,忽略大小写; boolean equalsIgnoreCase(Object str);
?
4、字符串的转换:
?
?? 1)将字符数组转换成字符串;
?
????? 构造函数方式:
?
????? String(char[] ch)
?
????? String(char[],offset,count);将字符数组中的一部分转化成字符串。
?
????? 使用:就是创建对象的时候初始化字符数组,变成字符串。
?
?????????????? char[] ch = {'a','b','d','f','g'}
?
?????? ?????? String s =? new String(ch);
?
?????????????? String s =? new String(ch,offset,count);
?
????? 静态方法:下面这两个方法也可以将字符数组转换成字符串。
?
??????????????? static String copyValueOf(char[] data);
?
??????????????? static String copyValueOf(char[] data,int offset, int count)
?
????????????? static String ValueOf(char[]);????
?
?? 2)将字符串转化成数组。
?
?????? char[] toCharArray()
?
?? 3)将字节数组转化成字符串。
?
?????? 构造函数:
?
?????? String(byte[] ch)
?
?????? String(byte[],offset,count);将字符数组中的一部分转化成字符串。
?
?? 3)将字符串转化为字节数组
?
?????? byte[] getBytes()??
?
?? 4)将基本数据类型转换成字符串。
?
????? static String ValueOf(int);
?
????? static String ValueOf(double);???
?
????? static String ValueOf(3);等于3+“”他们是一样的效果,前面写的比较专业。
?
5、切割和替换。
?
?? 切割:String[] split(regex);
?
?? 替换:String replace(oldchar,newchar);
?
?? 获取字串:
?
?? 获取字符串中的一部分。
?
???????? String substring(begin);
?
???????? 获取的字符串是从头到尾。
?
????? ?String substring(begin,end);
?
???????? 获取的是包括头,但是不包括尾;重点:
?
6、字符串的转换,去除空格,比较;
?
? 1)字符串转换大小写。
?
???? String toUpperCase();转换成大写
?
???? String toLowerCase();转换成小写。
?
? 2)去除空格(两端的空格)
?
???? String trim();
?
? 3)对两个字符串进行自然顺序的比较。
?
???? int compareTo(String)
?
???? int a = s1.compareTo(s2)
?
???? 根据a的值来判断大小;
?
???? 注意:返回值为0是相等、
?
?????????? 返回值大于0是前面的大于后面的字符串。
?
????? ?? 返回值小于0是前面的小于后面的字符串。
?
7、将字符串反转。
?
?? 步骤:1)将字符串变成数组。
?
???????? 2)对数组反转
?
???????? 3)将数组变成字符串、
?
8、StringBuffer是字符串缓冲区。
?
?? StringBuffer是一个容器。容器的特点;数据类型不确定,最终要变成字符串的时候,我们会用StringBuffer()容器;
?
?? 1)长度是可以变化的。
?
?? 2)可以直接操作多个数据类型。
?
?? 3)最后会通过toString()方法变成字符串。
?
?? append();是添加的意思;
?
?? StringBuffer缓冲区是面盆理论。注意你往里里面添加任何东西,最后都是在同一个容器当中,不会产生新的缓冲区对象。
?
?? 所以我们创建有一个对象,之后直接append()里面添加东西就行了,不用复制给新的对象了,直接就到缓冲区中了。
?
?? 而字符串String这样写就会产生新的对象。
?
?? 1)存储:
?
?? StringBuffer append();将指定的数据作为参数添加到已有的数据结尾处。
?
?? StringBuffer insert(index,数据);可以将数据插入指定的index位置。
?
?? 2)删除
?
???? StringBuffer delete(start,end);删除缓冲区中的数据。包含start,不包含end。
?
???? StringBuffer deleteCharAt(index)
?
?? 清空缓冲区:
?
?? sb.delete(0,sb.length());这个是清除缓冲区的意思。
?
?? 3)获取:
?
???? 获取字串;
?
???? String substring (int start,int end);
?
?? 5)反转:
?
??? StringBuffer? reverse();
?
?? 6) 将缓冲区中指定的数据存储到指定字符数组中。
?
????? void getChars (int srcBegin,int srcEnd,char[] dst,int dstBegin)
?
9、java的升级有三种情况,
?
?? 第一提高效率。第二简化书写,第三;提高安全性。
?
?? jdk1.5版本出现之后,我们又有了一个可以替代StringBuffer的类,为StringBuilder
?
?? 两者的区别:
?
?? StringBuffer是线程同步。
?
?? StringBuilder 是线程不同步。
?
?? 以后开发建议使用StringBuilder,因为它提高效率,至于线程不同步,我们可以通过锁来完成,
?
?? 单线程的时候,直接用,对于线程不存在安全问题。
?
10、基本数据类型的对象包装类;
?
?? byte?????? Byte
?
?? short????? short
?
?? int??????? Integer
?
?? long?????? Long
?
?? boolean??? Boolean
?
?? float????? Float
?
?? double???? Double
?
?? char?????? Character
?
基本数据类型对象包装类的最常见作用;
?
就是用于基本数据类型和字符串之间做转换
?
基本数据类型转换成字符串。
?
?? 基本数据类型+""
?
?? 基本数据类型.toString(基本数据类型值);
?
?? 如:Integer.toString(34);
?
?? 字符串转换成基本数据类型。下面都是调用的静态方法。
?
?? int a = Integer.parseInt("123");
?
?? double a = Double.parseDouble("12.13");
?
?? boolean a = Boolean.parseBoolean("true");
?
?? 用创建对象的方式,调用intVlue()方法来转换成基本数据类型值。
?
?? Integer i = new Integer("123");
?
?? int num = i.intValue();
?
十进制转化成其他进制;
?
? toBinaryString();
?
? toHexString();
?
? toOctalString();
?
其他进制转化成十进制。
?
? 注意:参数的用法;
?
? parseInt(string,radix);注意;parsrInt("1010101",2);是将101010的二进制转换成10进制数。
?
? parseInt(string,radix);注意;parsrInt("3c",16);??? 是将3c的十六进制转换成10进制数。
?
11、jdk1.5以后出现的新特性;
?
??? Integer x = new Integer(4);
?
??? Integer x = 4;这两种写法现在是一样的。
?
???? 4相当于new integer(4);
?
??? 这里面实现了自动装箱的动作;
?
? 2)Integer? x=? x + 2;? 这个也是可以的,x是对象,2是基本数据类型性,这时我们先将x拆箱,然后和2相加,然后在把相加??????? 后的值装箱赋值给Integer类型的 x。
?
12、三目运算符;
?
??? 一个小例子:s1和s2是传进来的不确定大小的参数。
?
?? String max="",min="";
?
?? max =(s1.length() > s2.length())? s1:s2;
?
?? min = (max != s1)? s1:s2
?