知方号 知方号

String字符串 字符串一旦初始化就不可以被改变对吗

String字符串

一、String 的含义

String 是定义一个字符串对象(内存中的字符串都是一个对象。)String 一旦被初始化就不能被改变(可以改变变量指向,但是不能改变对象内容)

定义方式: String s1 = “abc”; //在内存中存在一个对象。  String s2 = new String("abc"); //在内存中存在两个对象。    String s3 = "abc";

比较: s1 == s2 为false  s1 == s3 为true (相同的字符串在静态池中一旦存在,就不会再产生新的该字符串了,以后其再出现,都使用它) String的equals方法: s1.equals(s2) == true;

二、字符串的常见方法

1、获取1.1、字符串中包含的字符数(也就是字符串的长度)int length(); (注意与数组中的length做区别,数组中为属性,字符串中为方法)

1.2、某一个角标位置上的字符char charAt(int index); (当访问的角标不存在时,提示字符串角标越界异常)

1.3、根据字符获取该字符在字符串中的角标位置int indexOf(int ch); 返回的是字符第一次出现的角标位置。int indexOf(int ch,int fromIndex); 返回的是从fromIndex开始字符出现的角标位置。

int indexOf(String str); 返回的是字符串第一次出现的角标位置。int indexOf(String str,int fromIndex); 返回的是从fromIndex开始字符串 出现的角标位置。

(当访问的字符 或 字符串不存在时,返回 -1)

int lastIndexOf(int ch): 反向索引(种类和解释与正向索引相同 )注:反向索引只是从右向左索引找到第一次出现目标的角标位置, 返回的依然是角标位置。2、判断

2.1、判断字符串中是否包含指定字符串 booleancontains(CharSequence s) :CharSequence:为String实现的接口

特殊之处:indexOf(String str):可以索引字符串str第一次出现的位置,如果返回 -1,则表示该str不在字符串内。 所以,也可以用于对指定字符串判断是否包含。 if(str1.indexOf(“aaa”) == -1) 而且该方法既可以判断,由能获取位置。

2.2、判断字符串是否有内容 booleanisEmpty() :当且仅当长度为0时返回true。

2.3、判断字符串是否以某某开头 booleanstartsWith(String prefix)

2.4、判断字符串是否以某某结尾 booleanendsWith(String suffix)

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

2.5、判断字符串的内容是否相同,(不考虑大小写)booleanequalsIgnoreCase(String anotherString)

3、转换。3.1、 将字符数组转换成字符串构造函数: String(char[] value)  String(char[] value, int offset, int count): 将数组中从下标offset开始,一共count位字符转换成字符串。

静态方法: static StringcopyValueOf(char[] data)  static StringcopyValueOf(char[] data, int offset, int count)

 static StringvalueOf(char[] data)

3.2、 将字符串转换成字符数组 char[]toCharArray()

3.3、 将字节数组转换成字符串String(byte[] value)String(byte[] value, int offset, int count): 将数组中从下标offset开始,一共count位字符转换成字符串。    其他方法参见 3.5。

3.4、 将字符串转换成字节数组 byte[]getBytes(String charsetName)

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

static StringvalueOf(boolean b) static StringvalueOf(char c) static StringvalueOf(char[] data) static StringvalueOf(double d) 等等。

注意:字符串和字节数组在转换过程中是可以指定编码表的。

4、替换

Stringreplace(char oldChar, char newChar) : 返回一个数组,它是用newChar 替换就数组中的oldchar等到的。(一个一个的替换) Stringreplace(CharSequence target, CharSequence replacement) : 后替前,用新串替换原串中的子串。

注:原字符串没有改变,只是新出现了一个替换后的字符串(字符串一旦初始化,不能改变) 如果要替换的字符没有,还是返回原串,不会生成新的字符串。

5、切割,分割

String[]split(String regex) : 指定其中某一个字符或字符串,以其下刀,切割字符串(其实应当依据正则表达式规则拆分)

6、子串:(获取一个字符串的一部分)

Stringsubstring(int beginIndex) //从指定下标位置到结尾。 Stringsubstring(int beginIndex, int endIndex) //从指定下标位置到结束下标位置前一个

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

7.1:将字符串转换成大写或者小写。 StringtoUpperCase() StringtoLowerCase() 7.2:将字符串两端多余的空额去除。 Stringtrim() 7.3:将两个字符串进行自然顺序的比较。 intcompareTo(String anotherString) intcompareToIgnoreCase(String str) :不考虑大小写。

从第一位开始比较,比参数大返回正数,比参数小返回负数,都相等返回参数为0:一旦在某一位上分出大小了,便不再向后比较。

三、StringBuffer

定义:字符串缓冲区, 为一个容器。

特点:1、长度可变化。2、可以直接操作多个数据类型。3、最终通过toString方法返回一个字符串。

c: create u: update r:read d: delete

1、存储StringBuffer append():将指定数据作为参数添加到已有数据的结尾处。注:在StringBuffer对象调用appeed方法后,返回的就是其本身。StringBuffer insert(int offset, 基本数据 b) : 从offest下标位开始插入 基本数据类型、字符串或者数组 b。注:在StringBuffer对象调用insert方法后,返回的就是其本身。

2、删除 StringBuffer delete(int start, int end) : 移除下标start到 end-1的字符。 注:在StringBuffer对象调用delete方法后,返回的就是其本身。 StringBufferdeleteCharAt(int index) : 移除此序列指定下标位置的字符(char)。 注:在StringBuffer对象调用deleteCharAt方法后,返回的就是其本身。

清空缓冲区: sb.delate(0,sb.length());

3、获取charcharAt(int index) 返回此序列中指定索引处的 char 值。intindexOf(String str) 返回第一次出现的指定子字符串在该字符串中的索引。intindexOf(String str, int fromIndex) 从指定的索引处开始,返回第一次出现的指定子字符串在该字符串中的索引。intlastIndexOf(String str) 返回最右边出现的指定子字符串在此字符串中的索引。 intlastIndexOf(String str, int fromIndex) 返回最后一次出现的指定子字符串在此字符串中的索引。

Stringsubstring(int start) 返回一个新的 String,它包含此字符序列当前所包含的字符子序列。 Stringsubstring(int start, int end) 返回一个新的 String,它包含此序列当前所包含的字符子序列。 注意:这里返回的是String,不StringBuffer。

String toString():放回当前缓存区字符串。 int length(): 返回字符数。

4、修改

StringBufferreplace(int start, int end, String str) 在start和end之间,用str替换

voidsetCharAt(int index, char ch) 在index下标位置使用 字符dh替换原字符

5、反转

StringBufferreverse()

6、 voidgetChars(int srcBegin, int srcEnd, char[] dst, int dstBegin) 将缓冲区中的指定数据存到指定的字符数组中,从指定位置开始存。

四、StringBuilder在jdk 1.5之后新加功能其余StringBuffer功能一样。

与StringBuffer的区别: StringBuffer是线程同步的。 StringBuilder是线程不同步的。

当是单个线程操作缓冲区时,建议使用 StringBuilder 其有更高的效率。

五、jdk版本升级的三因素

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

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至lizi9903@foxmail.com举报,一经查实,本站将立刻删除。