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. angular 数据加载动画 longding

    由于公司服务器架构不行,每次加载数据都要很久,但是都是使用angular来渲染数据,不像jquery有beforsend什么的方法, 这是一个github上找的,很轻使用也很简单 1.安装  npm ...

  2. js点击按钮,放大对应图片代码

    <!doctype html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  3. 关于IE6幽灵字体

    前言:今天做项目的时候在IE6下出现了这样的一种现像,这种情况只在IE6下出现,最后在网友的帮助下这个问题最终得到了解决.所以马上作了下笔记! 情况如下图: 我在网上找了点资料出现IE6下幽灵字体的情 ...

  4. C语言之可重入函数 && 不可重入函数

    可重入函数 在 实时系统的设计中,经常会出现多个任务调用同一个函数的情况.如果这个函数不幸被设计成为不可重入的函数的话,那么不同任务调用这个函数时可能修改其他任 务调用这个函数的数据,从而导致不可预料 ...

  5. Linux系统 fdisk命令 创建新分区

    --fdisk命令fdisk -l /dev/sda           # 查看分区 fdisk    /dev/sda           # 创建分区  n                    ...

  6. c#中的面向对象基础知识总结

    面向对象 1.面向过程----->面向对象 1.  面向过程:面向的是完成这件事儿的过程,强调的是完成这件事儿的动作. 面向对象:意在写出一个通用的代码,屏蔽差异. 我们在代码中描述一个对象,通 ...

  7. Hashtable键值集合

    //Hashtable键值集合 键必须是维一的 类似于索引 Hashtable ht = new Hashtable(); ht.Add(, "中国"); ht.Add(, ); ...

  8. 生产环境 tomcat中启动缓慢

    具体的原因没研究,大概是一个随机数种子生成的速度拖慢了,直接copy一份解决方案,属于备忘材料 解决 有两种解决办法: 1)在Tomcat环境中解决 可以通过配置JRE使用非阻塞的Entropy So ...

  9. 理解jquery的.on()方法

    jquery在的.on()方法用来给元素绑定事件处理函数的,我经常用在两个地方: 给未来的元素绑定事件:我总是这样用:$(document).on('click','#div1',function() ...

  10. 编写自己的javascript功能库之Ajax(仿jquery方式)

    本人学习的是php,所以就用php跟js来演示代码了,主要是锻炼自己写js的能力,练练手而已. 下面这是我编写的操作ajax的代码功能,勉强让我称之为库吧.. js代码实例(tool.ajax.js) ...