黑马程序员---java基础----String类

来源:互联网 发布:知金教育靠谱吗 编辑:程序博客网 时间:2024/05/29 12:07

String类

 

1. String类重要性

  字符串""这个事物,Java中也是一个对象,对象的描述类,java.lang.String,提供很多方法操作字符串。

  使用频率非常高:身高,年龄,学历,工作经历,婚姻状况,人生目标

  学会学好String类,提供操作方法,方法必须要熟练.

 

2. String类的特点

l 字符串是一个特殊对象,""就是字符串对象,这个对象不用new 

l 字符串是常量,一旦定义了,不能被改变 -- 不可变对象

l 被final修饰的类,不能有子类

l 定义字符串对象两种方式

  String s = "abc";

  String s = new String("abc");

 

 区别第一种创建了一个对象 "abc"

 第二种方式创建了2个对象,一个是new String() 一个是"abc"

3. String类,字符串的底层原理

  字符串对象,的底层是由一个字符数组实现,数组被final修饰,字符串一旦建立成功不可改变

4. String类的构造方法

l 将字节数组转成字符串 String(byte[] bytes)传递字节数组,出来的对象是个字符串,查询编码表,默认编码表GBK,负数出来的结果就是汉字

l 将字节数组转成字符串String(byte[] bytes,int offset,int length)开始的下标,获取的个数,注意越界异常

 

l 将字符数组传参字符串String(char[] ch)传递字符数组,出来的也是一个字符串对象,不查询编码表

l 将字符数组中的一部分转成字符串String(char[] ch,int offset,int length) 注意越界异常

1. String类的其他方法,判断,获取,转换等。字符串的缓冲区对象StringBuffer,StringBuilder,基本数据类型对象包装类Integer, JDK5新特性,自动装箱拆箱。 write less do more

2. String类的判断方法

  方法运算结构都是布尔类型boolean

l 判断两个字符串是否完全相同,如果完全相同返回trueboolean equals(Object obj),String类继承Object,重写equals方法,建立字符串自己的比较方式

l 判断两个字符串是否完全相同,不考虑大小写 boolean equalsIgnoreCase(String s)

l 判断一个字符串,是否包含另一个字符串,如果完全包含,返回trueboolean contains(String s)

l 判断一个字符串是否以另一个字符串开头,完全开头返回trueboolean startsWith(String s)

l 判断一个字符串是否以另一个字符串结尾,完全结尾返回trueboolean endsWith(String s)

l 判断一个字符串中是否有字符,如果没有字符返回trueboolean isEmpty(),开始版本JDK1.6

 

3. String类的获取方法

  获取,从字符串中找东西

l 指定位置获取这个位置上的单个字符,返回char类型,char charAt(int index),传递下标的方法,注意越界异常

l 指定字符,返回这个字符在字符串中第一次出现的下标,int indexOf(char ch),如果找不到这个字符,返回负数,肯定小于0

l 指定字符,返回这个字符在字符串中第一次出现的下标,指定开始查找的位置,int indexOf(char ch,int fromIndex)

l 指定字符串,返回这个字符串在另一个字符串中第一次出现的下标 int indexOf(String s)

l 指定字符串,返回这个字符串在另一个字符串中第一次出现的下标,指定开始查找的位置,int indexcOf(String s,int fromIndex)

l 指定字符,返回这个字符在字符串中最后一次出现的位置,反向索引,int lastIndexOf(char ch),反向,但是下标不变

l 指定字符,返回这个字符在字符串中最后一次出现的位置,反向索引,指定开始查找的位置 int lastIndexOf(char ch,int formIndex)

l 返回字符串中字符的个数  int length()  length length() 

l 返回字符串的一部分String substring(int start,int end) 返回一个新的字符串,原始不变。包含头,不包含尾,小心越界异常

l 返回字符串的一部分 String substring(int start)开始下标,后面的全要

 

4. String类转换方法

  将字符串转成其他形式

l 将字符串转成字节数组,返回字节数组 byte[] getBytes(),查表编码表

l 将字符串转成字符数组,返回字符数组 char[] toCharArray(),不查表

l 字符串转成大写或者小写字母 ,转大写toUpperCase() ,转小写 toLowerCase(),运行后返回新的字符串,原始不变

l 连接字符串 String concat(String s) 返回新的字符串

l 将其他数据类型变成字符串 ,静态方法,反新字符串 String valueOf(任意类型)

 

5. String类的其他常见方法

l 对字符串进行切割 ,返回新的字符串数组,String[] split(String s)按照指定的字符串进行切割,存储到新的字符串数组中

l 对字符串进行替换,返回新的字符串,String replace(char oldchar, char newChar)

l 对于字符串的替换方法 String replace(String oldString,String newString)

l 去掉字符串两端的空格,返回新的字符串 String trim()

l 字符串按照字典顺序比较   int compareTo(String s)

 

6. 计算一个字符串在另一个字符串中出现的次数

   ab car cdf car eghj car klm car n      car

7. 自己定义方法实现String类中的 charAt()功能

 传递索引,返回指定下标上的单个字符,如果下标乱传递参数,返回' '

 字符串变成字符数组 toCharArray() 返回指定下标上的字符

 

8. 字符串的缓冲区对象StringBuffer

  缓冲区:出现目的,提高String类的操作效率,缓冲区这个此意思就是提高效率

  StringBuffer类的特点,提供很多方法,操作字符串

  可变字符序列,其实就是一个字符数组,可变长度字符数组

  创建缓冲区对象的时候,字符数组初始容量16个字符的数组

9. StringBuffer类的构造方法

   空参数构造方法  new StringBuffer()

   带有一个String类型的构造方法 new Stringbuffer("")

 

10. StringBuffer类的其他方法

l 向缓冲去中追加数据,无论追加的数据是什么类型,最终到了缓冲区中都变成了字符串。方法名  append() 。 

l append()这个方法的返回值很特殊,返回值类型StringBuffer,返回的是本类对象的引用 append(){return this;}既然返回的是一个本类的对象,对象就可以调用方法。

l 移除缓冲区中的字符 StringBuffer delete(int start,int end)包含头,不包含尾

l 移除指定下标中的单个字符 StringBuffer deleteCharAt(int index)

l 将数据插入到缓冲区的指定位置 StringBuffer insert(int index,数据类型)新的数据,占在指定下标上,原有的数据向后顺延

l 修改的指定位置上的字符  void setCharAt(int index,char ch)

l 翻转缓冲区 StringBuffer reverse()

l 将缓冲区变成字符串 String toString().由可变对象,变成不可变对象

 

11. StringBuilder缓冲区类

  提高字符串的操作效率而来,底层也是可变字符数组,16个字符。StringBuffer类的方法和StringBuilder中的方法一致

  StringBufferStringBuilder区别

    1.0              1.5

    同步的线程安全 , 不同步的线程不安全,运行速度快

 

12. 基本数据类型对象包装类

  八种基本数据类型,进行了对象的封装,提供更多的方法,操作数据了

  byte  Byte

  short  Short

  int    Integer

  long  Long

  char  Character

  boolean Boolean

  float  Float

  double Double

13. Integers

  静态常量  MAX_VALUE  MIN_VALUE

将数字格式的字符串转成基本数据类型int  static int parseInt(String s)

将数字格式的字符串转成基本数据类型int  static int parseInt(String s,int radix) 表示前面的字符串是几进制的,运算结果都是十进制

1. JDK1.5新特性,自动装箱拆箱

自动装箱,将基本数据类型转成对象

自动拆箱,将转成对象的基本数据类型,转回基本类型


练习

1、模拟登录,给三次机会,并提示还有几次


package cn.itcast_test03;import java.util.Scanner;/** * 需求:模拟登录,给三次机会,并提示还有几次。 * 分析: * a: 定义一个用户名和密码(字符串类型的) * b: 键盘录入用户名和密码 * 然后使用录入的用户名和定义的用户名进行比较,以及录入的密码和定义的密码进行比较 * 如果都相当认为登录成功,给出提示, 结束循环 * 如果登录失败,需要重写登录,所以需要使用循环(for) */public class StringTest {public static void main(String[] args) {// 定义一个用户名和密码(字符串类型的)String userName = "admin" ;String password = "admin" ;// 创建键盘录入对象Scanner sc = new Scanner(System.in);for(int x = 0 ; x < 3 ; x++){// x= 0, 1 , 2// 友情提示System.out.println("请您输入用户名: ");// 获取键盘录入的用户名String inputUserName = sc.nextLine();// 友情提示System.out.println("请您输入密码: ");// 获取键盘录入的用户名String inputPassword = sc.nextLine();// 判断if(inputUserName.equals(userName) && inputPassword.equals(password)){System.out.println("登录成功!");break ;}else {// 2 , 1 , 0if( (2 - x ) == 0){System.out.println("该账号已被锁定, 你是盗号的吗?");}else {System.out.println("登录失败!你还有" + (2 - x) + "次机会!!!");}}}}}

2、统计一个字符串中大写字母字符,小写字母字符,数字字符出现的次数。(不考虑其他字符)
  String s = "abAc8H6nMs4M" 

package cn.itcast_test04;/** * 需求:统计一个字符串中大写字母字符,小写字母字符,数字字符出现的次数。(不考虑其他字符) * String s = "abAc8H6nMs4M" ; * 分析: * a: 定义三个统计变量bigCount = 0 , minCount = 0 , numCount = 0 ; * b: 获取字符串中的每一个字符(遍历) * 判断对应的字符是否在指定的范围内,如果在就对指定的统计变量进行++ *  * ch >= 'a' && ch <= 'z' * ch >= 'A' && ch <= 'Z' * ch >= '0' && ch <= '9' */public class StringTest2 {public static void main(String[] args) {// 定义一个字符串String s = "abAc8H6nMs4M" ;// 定义统计变量int bigCount = 0 ;int minCount = 0 ;int numCount = 0 ;// 遍历字符串for(int x = 0 ; x < s.length() ; x++){// 获取当前遍历的字符char ch = s.charAt(x) ;// 判断if(ch >= 'a' && ch <= 'z'){minCount++ ;}else if(ch >= 'A' && ch <= 'Z'){bigCount++ ;}else {numCount++ ;}}// 输出System.out.println("大写字母字符: " + bigCount + "个");System.out.println("小写字母字符: " + minCount + "个");System.out.println("数字字符: " + numCount + "个");}}


3、把字符串反转
举例:键盘录入"abc"
反转结果:"cba"

package cn.itcast_test07;import java.util.Scanner;/** * 需求:把字符串反转举例:键盘录入"abc"反转结果:"cba" * *分析: *a: 键盘录入一个字符串 *b: 定义一个字符串,用来记录结果 *c: 反向遍历字符串,获取每一个字符和b中定义字符进行拼接 * *反向遍历字符串: *(1):直接使用字符串进行反向遍历 *(2):把字符串转换成字符数组,然后方向遍历字符数组 */public class StringTest2 {public static void main(String[] args) {// 键盘录入一个字符串Scanner sc = new Scanner(System.in);// 友情提示System.out.println("请您输入一个数据: ");// 获取键盘录入数据String line = sc.nextLine() ;// 定义一个字符串,用来记录结果String result = "" ;//  反向遍历字符串,获取每一个字符和b中定义字符进行拼接for(int x = line.length() - 1 ; x >= 0 ; x--){char ch = line.charAt(x) ;result += ch ;}// 输出System.out.println(result);}}

4、 举例:
int[] arr = {1,2,3};
输出结果:
"[1, 2, 3]"
用StringBuffer的功能实现

package cn.itcast_test07;/** * 举例:int[] arr = {1,2,3};输出结果:"[1, 2, 3]"用StringBuffer的功能实现分析:a: 定义数组int[] arr = {1,2,3};b: 创建StringBuffer对象,用来存储拼接的结果c: 添加"["d: 遍历数组,获取每一个元素,然后将其添加到b中的对象中e: 把StringBuffer转换成字符串 */public class StringBufferTest {public static void main(String[] args) {// 定义数组int[] arr = {1,2,3};// 创建StringBuffer对象,用来存储拼接的结果StringBuffer sb = new StringBuffer() ;// 添加"["sb.append("[");// 遍历数组,获取每一个元素,然后将其添加到b中的对象中for(int x = 0 ; x < arr.length ; x++){if(x == arr.length - 1){sb.append(arr[x] + "]");}else {sb.append(arr[x] + ", ");}}// 把StringBuffer转换成字符串String result = sb.toString() ;// 输出System.out.println(result);}}
5、StringBuilder定义

package cn.itcast_test08;/** * StringBuilder:线程不安全的可变的字符序列 .  * 线程不安全效率高 , 如果是单线程环境,我们可以使用StringBuilder来提高效率 *  * String 和 StringBuffer 和 StringBuilder 的区别: *  * String是一个不可变的字符串 * StringBuffer和StringBuilder是可变的字符序列 *  * StringBuffer: 线程安全 , 效率低 *  StringBuilder: 线程不安全 , 效率高 */public class StringBuilderDemo {public static void main(String[] args) {// 创建StringBuilder对象StringBuilder sb  = new StringBuilder() ;// 添加元素sb.append("hello");sb.append("world");sb.append("java");// 输出System.out.println(sb);}}



0 0
原创粉丝点击