String类

一、概述

  • 字符串是一个特殊的对象。
  • 字符串一旦初始化就不可以被改变。
  • String s1 = "abc";//s1是一个类类型变量,"abc"是一个对象。
  • String s2 = new String("abc");有什么区别?s1代表一个对象,s2代表两个对象。
  • String类复写了Object的equals方法,将此字符串与指定的对象比较。该方法用于判断字符串是否相同。

二、获取和判断

String类是用于描述字符串事物。那么它就提供了多个方法对字符串进行操作。

常见的操作有哪些?

1、获取。

  1.1 字符串中包含的字符数,也就是字符串的长度。

  int length():获取长度。

  1.2 根据位置获取位置上某个字符。

  char charAt(int index):返回指定索引处的char值。//当访问到字符串中不存在的叫表示会发生StringIndexOutOfBoundsException。

  1.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在字符串中第一次出现的位置。

  反向索引:

  int lastIndexOf(int ch):返回指定字符串在此字符串中最后一次出现的索引。

  int lastIndexOf(int ch,int fromIndex):返回指定字符串在此字符串中最后一次出现处的索引,从指定的索引处开始进行反向搜索。

  int lastIndexOf(String str):返回指定子字符串中在此字符串中最右边出现处的索引。

  int lastIndexOf(String str,int fromIndex):返回指定字符串在此字符串中最后一次出现处的索引,从指定的索引开始反向搜索。

2、判断。

  2.1 字符串中是否包含某一个子串。

  boolean contains(CharSequence s):当且仅当此字符串包含指定的char值序列时,返回true。//接口 CharSequence字符序列:已知实现类String、StringBuffer。

    特殊之处:indexOf(str):可以索引str第一次出现的位置。如果返回-1,表示该str不在字符串中存在。if(str.indexOf("aa")!=-1),而且该方法既可以判断,又可以获取出现的位置。

2.2 字符中是否有内容。

    boolean isEmpty():当且仅当length()为0时返回true。//从1.6开始.

  2.3 字符串是否是以指定内容开头。

    boolean startsWith(String suffix):测试此字符串是否以指定的前缀开始。

  2.4 字符串是否以指定内容结尾。

    boolean endsWith(String suffix):测试此字符串是否以指定的后缀结束。

  2.5 判断字符串的内容是否相同。复写了Object类中的equals方法。、

    boolean equals(Object anObject):将此字符串与指定的对象比较。

  2.6 判断内容是否相同。并且忽略大小写。

    boolean equalsIgnoreCase(Srting anotherString):将此String与另一个String比较,不考虑大小写。

3、转换。

  3.1 将字符数组转成字符串

    构造函数:String (char[] value):分配一个新的String,使其表示字符数组参数中当前包含的字符序列。

         String (char[] value,int offset,int count):分配一个新的String,它包含取自字符数组参数一个子数组的字符。注意count是个数。

    静态方法:static String copyValueOf(char[] date):返回指定数组中表示该字符序列的String。

         static String copyValueOf(char[] date,offset,int count):返回指定数组中表示该字符序列的String。

         static String valueOf(char[] ):返回char参数的字符串表示形式。

  3.2 将字符串转成字符数组

    char[] toCharArray()将此字符串转换为一个新的字符数组。

  3.3 将字节数组转成字符串

    构造函数:String(byte[] bytes):通过使用平台的默认字符集解码指定的byte子数组,构结一个新的string。

         String (char[] value,int offset,int count):将字节数组的一部分转成字符串。

  3.4 将字符串转成字节数组

    byte[] getBytes():通过使用平台的默认字符集将此String编码为byte序列,并将结果存储到一个新的byte数组中。

  3.5 将基本数据类型转成字符串

    static String valueOf(int):返回int参数的字符串表示形式。

    static String valueOf(double):返回double参数的字符串表示形式。

    //3+"";//String.valueOf(3)

    特殊:字节数组和字符串转换过程中,是可以指定编码表的。

4、替换。

  String replace(char oldChar,char newChar):返回一个新的字符串,它是通过newChar替换此字符串中出现的所有oldChar得到的。

  //如果要替换的字符不存在,返回的还是原串。

  String replace(CharSequence target,CharSequence replacement):使用指定的字面值替换序列替换此字符串所有匹配字面值目标序列的子字符串。

5、切割。

  String[] split(String regex):根据给定正则表达式的匹配拆分此字符串。

6、字串。获取字符串中的一部分。

  String subSrting(int beginIndex):返回一个新的字符串,它是此字符串的一个仔字符串。//从指定位置开始到结尾。如果交表不存在,会出现字符串交表越界异常。

  String subSrting(int beginIndex,int endIndex):返回一个新的字符串,它是此字符串的一个仔字符串。//包含头,不包含尾。  

7、转换,去除空格,比较。

  7.1 将字符串转成大写或者小写。

    String toUpperCase();使用默认语言环境的规则将此 String 中的所有字符都转换为大写。

    String toLowerCase(); 使用默认语言环境的规则将此 String 中的所有字符都转换为小写。

  7.2 将字符串两端的多个空格去除。

    String trim();返回字符串的副本,忽略前导空白和尾部空白。

  7.3 对两个字符串进行自然顺序的比较。

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

    int compareToIgnoreCase(String str):按字典顺序比较两个字符串,不考虑大小写。

8、练习。

1.模拟一个trim方法,去除字符串两端的空格。

  思路:

  1,判断字符串第一个位置是否是空格,如果是继续向下判断,知道不是空格为止。结尾处判断空格也是如此。charAt()

  2,当开始和结尾都判断到不是空格时,就是要获取的字符。substring(start,end+1)//记住:Java但凡取从头到尾的部分,都是包含头,不包含尾。

2.将一个字符串进行反转,将字符串中指定部分进行反转,"abcdefg",abfedcg。

  思路:

  1,曾经学习过对数组的元素进行反转。

  2,将字符串变成数组,对数组反转。toChatArray()

  3,将反转后的数组变成字符串。return new string(str);//valueOf(str);

  4,只要将反转的部分的开始和结束位置作为参数传递即可。reverseString(String s,int start,int end);

3.获取一个字符串在另一个字符串中出现的次数。

  "abkkcdkkefkkskk"

  思路:

  1,定义一个计数器。

  2,获取kk第一次出现的位置。while((index = str.indexOf(key,index))!=-1);

  3,从第一次出现的位置后剩余的字符串中继续获取kk出现的位置。每获取一次就计数一次。index= index + key.length();count++;

  4,当获取不到时,计数完成。//你建议使用split();不一定通用。

4,获取两个字符串中最大相同子串,第一个动作:讲短的那个串进行长度依次递减的的子串打印。

  "abcwerthelloyuiodef"

  "cvhellobnm"

  思路:

  1,将短的那个子串按照长度递减的方式获取到。

  2,将每获取到的子串去长串中判断是否包含,如果包含,已经找到。

StringBuffer(字符串缓冲区)

  • 字符串的组成原理就是通过该类实现的。
  • StringBuffer可以对字符串内容进行增删。
  • StringBuffer是一个容器。
  • 很多方法与String相同。
  • 特点:1,StringBuffer是可变长度的。2,可以直接操作多个数据类型。3,最终会通过toString方法变成字符串。//当数据个数和类型都不确定时使用StringBuffer最方便。

c(create)u(update)r(read)d(delete)

1.存储。

  StringBuffer append():将指定的数据作为参数添加到已有数据的结尾处。

  StringBuffer insert(int index,shuju):可以将数据插入到指定index位置上。

2.删除。

  StringBuffer delete(start,end):删除缓冲区中的数据,包含start,不包含end。//清空缓冲区:sb.delete(0,sb.length())

  StringBuffer deleteCharAt(int index):删除指定位置的字符。

3.获取。

  char charAt(int index):根据角标获取字符。

  int indexOf(str string):根据字符串获取位置。

  int lastIndexOf(str string):根据字符串往后第一次出现的位置。

  int length():获取字符串长度。

  String substring(int start):从start开始获取子串。

  String substring(int start,int end):从start开始到end结尾获取子串,包含头,不包含尾,返回的类型是String。

4.修改。

  StringBuffer replace(int start,int end,String str):将指定位置的内容替换为str。

  viod setCharaAt(int index,chat ch):将index上的内容替换为ch,不返回任何内容。

5.反转。

  StringBuffer reverse();

6.void getChars(int srcBegin,int srcEnd,char[] dst,int dstBegin):将缓冲区中指定数据存储到指定字符数组中。

(将srcBegin到srcEnd位置的内容从dstBegin存入dst字符数组中。)

JDK1.5 版本之后出现了StringBuilder。

StringBuffer是线程同步的。StringBuilder是线程不同步的。

Java升级的三个目的(因素):

  1. 提高效率。
  2. 简化书写。
  3. 提高安全性。

以后开发建议使用StringBuilder

.

黑马程序员_Java_String的更多相关文章

  1. 黑马程序员——【Java高新技术】——代理

    ---------- android培训.java培训.期待与您交流! ---------- 一.“代理概述”及“AOP概念” (一)代理概述 1.问题:要为已存在的多个具有相同接口的目标类的各个方法 ...

  2. 黑马程序员+SQL基础(上)

    黑马程序员+SQL基础 ---------------<a href="http://edu.csdn.net"target="blank">ASP ...

  3. 黑马程序员+Winform基础(上)

    黑马程序员+Winform基础 ---------------<a href="http://edu.csdn.net"target="blank"> ...

  4. 黑马程序员—C语言的函数、数组、字符串

    ------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 一.函数 定义:函数是代码复用的一种机制. 函数的基本语法: 返回类型 函数名 ( 参数类型 参 ...

  5. 黑马程序员:Java基础总结----泛型(高级)

    黑马程序员:Java基础总结 泛型(高级)   ASP.Net+Android+IO开发 . .Net培训 .期待与您交流! 泛型(高级) 泛型是提供给javac编译器使用的,可以限定集合中的输入类型 ...

  6. 黑马程序员:Java基础总结----类加载器

    黑马程序员:Java基础总结 类加载器   ASP.Net+Android+IO开发 . .Net培训 .期待与您交流! 类加载器 Java虚拟机中可以安装多个类加载器,系统默认三个主要类加载器,每个 ...

  7. 黑马程序员:Java基础总结----静态代理模式&动态代理

    黑马程序员:Java基础总结 静态代理模式&动态代理   ASP.Net+Android+IO开发 . .Net培训 .期待与您交流! 静态代理模式 public  class  Ts {   ...

  8. 黑马程序员:Java基础总结----枚举

    黑马程序员:Java基础总结 枚举   ASP.Net+Android+IO开发 . .Net培训 .期待与您交流! 枚举 为什么要有枚举 问题:要定义星期几或性别的变量,该怎么定义?假设用1-7分别 ...

  9. 黑马程序员:Java基础总结----反射

    黑马程序员:Java基础总结 反射   ASP.Net+Android+IO开发 . .Net培训 .期待与您交流! 反射 反射的基石:Class类 Class类代表Java类,它的各个实例对象又分别 ...

随机推荐

  1. java笔记5之逻辑运算符以及&&与&的区别

    1 &逻辑与:有false则false.         |逻辑或:有true则true.         ^逻辑异或:相同为false,不同为true.            举例:情侣关系 ...

  2. 关于Spring配置 (Cannot find class [org.apache.commons.dbcp.BasicDataSource] 问题)

    myeclipse抛出异常 org.springframework.beans.factory.CannotLoadBeanClassException: Cannot find /webapps/t ...

  3. [Qt] qtcreator 中打开console

    (1) qtcreator-->左侧Projects-->Run-->中间的checkbox (Run in terminal)打上勾 (2) 在项目的.pro文件中加上 " ...

  4. XSHELL使用技巧总结

    1. 配置鼠标右键直接黏贴,选中直接复制(和putty行为一致) 工具->选项->键盘和鼠标,向右按钮 2. 如何在不同的选项卡切换 查看->会话选项卡

  5. 简单的通过NSFileManager 存储图片

    UIImage *image = [UIImage imageNamed:@"Default.png"]; NSData *data = UIImageJPEGRepresenta ...

  6. windows安装PHP5.4.13 +Apache2.4.4(转)

    下载了PHP5.4.13 +Apache2.4.4,开始在网上下教程. 环境配置遇到的第一个问题就是网上很多教程是针对老版本的PHP和apache,不得不搜了很久才搜到这篇文章. windows安装P ...

  7. Java基础知识强化54:经典排序之插入排序(InsertSort)

    1. 插入排序原理图: 算法步骤: 1)将第一待排序序列第一个元素看做一个有序序列,把第二个元素到最后一个元素当成是未排序序列. 2)从头到尾依次扫描未排序序列,将扫描到的每个元素插入有序序列的适当位 ...

  8. (五)《Java编程思想》——final关键字

    可能使用final的三种情况:数据.方法.类. 1.final数据 final 常量必须是基本类型数据,且在定义时须赋值: 一个既是static又是final的域只占据一段不能改变的存储空间,只有一份 ...

  9. Sql Server同步之订阅

    1.新建一个订阅 2.订阅新建完成之后,先选择发布端 3.选择需要同步的组 4.选择目标数据库 5.选择链接发布端方式,采用sql server login 6.选择执行同步的计划 7.选择是立马执行 ...

  10. Canvas--2

    Canvas2(关键词:setLineDash .rect .strokeRect .clearRect .arc.sin .strokeText )   绘制其他样式: lineCap 结束端点的设 ...