字符串的基本操作

String类的概述

  JDK提供的API,查看String类的说明可以看到下面两句话

  字符串字面值"abc"也可以看成是一个字符串对象。
  字符串是常量,一旦被赋值,就不能被改变。

String类的构造方法

方法 说明
public String() 空构造
public String(byte[] bytes) 把字节数组转成字符串
public String(byte[] bytes,int index,int length) 把字节数组的一部分转成字符串
public String(char[] value) 把字符数组转成字符串
public String(char[] value,int index,int count) 把字符数组的一部分转成字符串
public String(String original) 把字符串常量值转成字符串

String类的判断功能

方法 说明
boolean equals(Object obj) 比较字符串的内容是否相同,区分大小写
boolean equalsIgnoreCase(String str) 比较字符串的内容是否相同,忽略大小写
boolean contains(String str) 判断大字符串中是否包含小字符串
boolean startsWith(String str) 判断字符串是否以某个指定的字符串开头
boolean endsWith(String str) 判断字符串是否以某个指定的字符串结尾
boolean isEmpty() 判断字符串是否为空。

String类的获取功能

方法 说明
int length() 获取字符串的长度。
char charAt(int index) 获取指定索引位置的字符
int indexOf(int ch) 返回指定字符在此字符串中第一次出现处的索引。
int indexOf(String str) 返回指定字符串在此字符串中第一次出现处的索引。
int indexOf(int ch,int fromIndex) 返回指定字符在此字符串中从指定位置后第一次出现处的索引。
int indexOf(String str,int fromIndex) 返回指定字符串在此字符串中从指定位置后第一次出现处的索引。
String substring(int start) 从指定位置开始截取字符串,默认到末尾。
String substring(int start,int end) 从指定位置开始到指定位置结束截取字符串。

String类的转换功能

方法 说明
byte[] getBytes() 把字符串转换为字节数组。
char[] toCharArray() 把字符串转换为字符数组。
static String valueOf(char[] chs) 把字符数组转成字符串。
static String valueOf(int i) 把int类型的数据转成字符串。
注意:String类的valueOf方法可以把任意类型的数据转成字符串
String toLowerCase() 把字符串转成小写。(了解)
String toUpperCase() 把字符串转成大写。
String concat(String str) 把字符串拼接。

String其他类型互转汇总

其它类型转成String类型

  • toString()

  • Object类中有public方法toString(),java对象都可以调用。注意:必须保证类对象不能为null值,否则抛出NullPointerException异常,派生类中一般覆盖此方法。

  • (String)

  • 强制类型转换,需要保证能够转成String,前面使用instanceof进行检查,否则抛出CalssCastException异常。注意:语法检查时不会报错,用时一定要小心。

  • valueOf(基本类型 i)

  • 与第一种类似,只是前者不能为null,后者可以为null。

  • ""+

  • 效率上toString()>String.valueOf>i+””

String类型转成其它类型

  • valueOf(String str)

  • 可以把任意类型的数据转成字符串

  • parseLong(String str)和parseInt(String str)

  • 注:基本类型数据级别(byte/short/char)->int->long->float->double
    低级别向高级别自动转换;高级别向低级别强制转换会导致溢出或丢失精度

附:基本类型与包装类类型转换
正向:Integeri=new Integer(100);

反向:int b=i.intValue();

特殊:int i=Integer.parseInt(“1234”);//可以通过

   floatf=Float.valueOf("1234").floatValue();

   charc=Character.valueOf(“1233”).charValue();

String、StringBuffer与StringBuilder之间区别

StringBuffer常用方法(StringBuilder的省略)

(由于StringBuffer和StringBuilder在使用上几乎一样,所以只写一个)

构造方法

方法 说明
publicStringBuffer() 初始化出的StringBuffer对象是一个空的对象
publicStringBuffer(int capacity) 分配了长度为capacity字节的字符缓冲区
publicStringBuffer(String str) 创建带有内容的StringBuffer对象

例子
 StringBuffer s = new StringBuffer();
   这样初始化出的StringBuffer对象是一个空的对象

 StringBuffer sb1=new StringBuffer(512);
   分配了长度512字节的字符缓冲区。

 StringBuffer sb2=new StringBuffer(“how are you?”)
  创建带有内容的StringBuffer对象,在字符缓冲区中存放字符串“how are you?”

常用方法

方法 说明
StringBuffer append(boolean b) 表示将括号里的某种数据类型的变量插入某一序列中
charAt( ) 返回此序列中指定索引处的 char 值
getChars(int start,int end,char chars[],int charStart) 将字符串的子字符串复制给数组
int length() 返回长度(字符数)。
toString( ) 返回此序列中数据的字符串表示形式。
subString( ) 返回一个新的 String,它包含此序列当前所包含的字符子序列。
StringBuffer delete(int start,int end) 删除指定区间以内的所有字符,包含start,不包含end索引值的区间。
StringBuffer deleteCharAt(int index) 删除指定位置的字符,然后将剩余的内容形成新的字符串
StringBuffer insert(int offset, Object obj) 该方法的作用是在StringBuffer对象中插入内容,然后形成新的字符串。
StringBuffer reverse() 将StringBuffer对象中的内容反转,然后形成新的字符串
void setCharAt(int index, char ch) 修改对象中索引值为index位置的字符为新的字符ch
void trimToSize() 将StringBuffer对象的中存储空间缩小到和字符串长度一样的长度,减少空间的浪费,和String的trim()是一样的作用。

执行速度比较

对字符串操作三者在执行速度方面的比较

  StringBuilder > StringBuffer > String

  String <(StringBuffer,StringBuilder)的原因

    String:字符串常量

    StringBuffer:字符创变量

    StringBuilder:字符创变量

    从上面的名字可以看到,String是“字符创常量”,也就是不可改变的对象。

String s = "abcd";
s = s+1;
System.out.print(s);// result : abcd1

 JVM是这样解析这段代码的:首先创建对象s,赋予一个abcd,然后再创建一个新的对象s用来;执行第二行代码,也就是说我们之前对象s并没有变化,所以我们说String类型是不可改变的对象了,由于这种机制,每当用String操作字符串时,实际上是在不断的创建新的对象,而原来的对象就会变为垃圾被GC回收掉,可想而知这样执行效率会有多底。

 而StringBuffer与StringBuilder就不一样了,他们是字符串变量,是可改变的对象,每当我们用它们对字符串做操作时,实际上是在一个对象上操作的,这样就不会像String一样创建一些而外的对象进行操作了,当然速度就快了。

StringBuilder与 StringBuffer

  StringBuilder:线程非安全的

  StringBuffer:线程安全的

  当我们在字符串缓冲去被多个线程使用是,JVM不能保证StringBuilder的操作是安全的,虽然他的速度最快,但是可以保证StringBuffer是可以正确操作的。当然大多数情况下就是我们是在单线程下进行的操作,所以大多数情况下是建议用StringBuilder而不用StringBuffer的,就是速度的原因。

posted @ 2017-09-08 21:15  杨洛平  阅读(1525)  评论(0编辑  收藏  举报