1.String类是不可变类,一旦一个String对象被创建以后,包含在这个对象中的字符序列式不可改变的,直至这个对象被销毁。

String s1 = "java";
s1 = s1 + "android";
s1 = s1 + "mysql";

1)上面三个语句使用了3个字符串直接量之外,还会额外生成2个字符串直接量,"javaandroid","javaandroidmysql";程序中的s1依次指向3个不同的字符串对象。因为String是不可变的,所以会额外产生很多临时变量。
2)使用StringBuffer和StringBuilder就可以避免这个问题,StringBuilder提供了一系列插入、追加、改变该字符串里包含的字符序列的方法。
3)StringBuffer和StringBuilder的length是可变的,可以通过length()、和setLength(int len)方法来访问和修改其字符序列的长度。
4)StringBuffer对象则代表一个字符序列可变的字符串。一旦通过StringBuffer生成了最终想要的字符串,就可以调用它的toString()方法将其转换成一个String对象。
5)StringBuilder也代表字符串对象,基本与StringBuffer相似。不同的是StringBuffer是线程安全的,而StringBuilder则没有实现线程安全,所以性能略高。

package cn.lsl;

public class StringBuilderTest {
public static void main(String[] args) {
StringBuilder sb = new StringBuilder();
//追加字符串
sb.append("java");
System.out.println(sb);
//插入
sb.insert(0, "hello ");
System.out.println(sb);
//替换
sb.replace(5, 6, ",");
System.out.println(sb);
//删除
sb.delete(5, 6);
System.out.println(sb);
//反转
System.out.println(sb.reverse());
//改变长度
sb.setLength(5);
System.out.println(sb);
}
}

2.String对象中常用的操作字符串的方法

1)char charAt(int index):获取字符串中指定位置的字符。

String s = new String("abcdefghijklmn");
System.out.println("s.charAt(2):" + s.charAt(2));

采用for循环遍历出字符串中的所有字符

for(int i=0; i<s.length(); i++){
System.out.println("Char " + i + " is " + s.charAt(i));
}

2)int compareTo(String anotherString):比较两个字符串的大小。如果两个字符串的字符序列相等,则返回0;不相等时,从两个字符串第0个字符开始比较,返回第一个不相等的字符差。
另一种情况,较长字符串的前面部分恰巧是较短的字符串,则返回它们的长度差。

String s1 = new String("abcdefgh");
String s2 = new String("abcde");
String s3 = new String("abcdefga");
System.out.println(s1.compareTo(s2));
System.out.println(s1.compareTo(s3));

3)String concat(String str):将该String对象与str连接在一起。

String s1 = "aaaa";
String s2 = "bbbb";
System.out.println(s1.concat(s2))

4)static String copyValueOf(char[] data):将字符数组连缀成字符串。
static String copyValueOf(char[] data,int offset,int count):将char数组的子数组中的元素连缀成字符串。

char data[] = new char[]{'a','b','c','d'};
System.out.println(String.copyValueOf(data));
System.out.println(String.copyValueOf(data,1,2));

5)boolean endsWith(String suffix):返回该String对象是否已suffix结尾。

String a = "abcdefg";
String b = "fg";
System.out.println(a.endsWith(b));

6)boolean equals(Object anObject):将该字符串与制定对象比较,如果二者包含的字符序列相等,则返回true,否则返回false。
boolean equalsIgnoreCase(String str):与equals(Object anObject)方法相似,只是忽略了大小写。

String a = "abc";
String b = "abc";
System.out.println(a.equals(b));
String c = "dEf";
String d = "DeF";
System.out.println(c.equalsIgnoreCase(d));

7)byte[] getBytes():将该String对象转换成byte数组。

String a = "abcdef";
byte b[] = a.getBytes();
System.out.println(b.length);

8)void getChars(int srcBegin,int srcEnd,char[] dst,int dstBegin):该方法将字符串从srcBegin开始,到srcEnd结束的字符复制到dst字符数组中,dstBegin为目标字符数组的起始复制位置。

char[] s1 = {'I',' ','l','o','v','e',' ','j','a','v','a'};
String s2 = "you";
s2.getChars(0, 3, s1, 7);
System.out.println(s1);

9)int indexOf(int ch):找出ch字符在该字符串中第一次出现的位置。
int indexOf(int ch, int formIndex);找出ch字符在该字符串中从fromIndex开始第一次出现的位置。
int indexOf(String str):找出str子字符串在该字符串中第一次出现的位置。
int indexOf(String str, int formIndex);找出str子字符在该字符串中从fromIndex开始后第一次出现的位置。

String s = "write once, run anywhere";
String ss = "run";
System.out.println(s.indexOf('r'));
System.out.println(s.indexOf('r', 2));
System.out.println(s.indexOf(ss));

int lastIndexOf(int ch):找出ch字符在该字符串中最后一次出现的位置。
int lastIndexOf(int ch, int formIndex);找出ch字符在该字符串中从fromIndex开始最后一次出现的位置。
int lastIndexOf(String str):找出str子字符串在该字符串中最后一次出现的位置。
int lastIndexOf(String str, int formIndex);找出str子字符在该字符串中从fromIndex开始后最后一次出现的位置。

10)boolean startsWith(String prefix):该String对象是否以prefix。
boolean startsWith(String prefix, int toffset):该String对象从toffset位置算起,是否以prefix开始。

String s = "write once, run anywhere";
String s1 = "write";
String s2 = "run";
System.out.println(s.startsWith(s1));
System.out.println(s.startsWith(s2, 12));

11)char toCharArray():将该String对象转换成char数组。

String a = "abcdef";
char b[] = a.toCharArray();
System.out.println(b.length);

12)String substring(int beginIndex):获取从beginindex位置开始到结束的子字符串。

String substring(int beginIndex, int endIndex):获取从beginIndex位置开始到endIndex位置的子字符串。
String a = "abcdefghijklmn";
System.out.println(a.substring(2));
System.out.println(a.substring(2,5));

13)String toLowerCase():将字符串转换成小写。
String toUpperCase():将字符串转换成大写。

String a = "aBcDeFgHiJkLmN";
System.out.println(a.toLowerCase());
System.out.println(a.toUpperCase());

14)String valueOf(X x):将基本数据类型转换成String对象。

String a = String.valueOf(23.333);
System.out.println(a);

String类中还有很多的方法,我们都可以从API文档中查到各种方法的用法。

Java笔记:String类的更多相关文章

  1. java笔记--String类格式化当天日期转换符文档

    String类格式化当天日期 --如果朋友您想转载本文章请注明转载地址"http://www.cnblogs.com/XHJT/p/3877389.html "谢谢-- 转换符:% ...

  2. java笔记--String类对象解析与运用

    --如果朋友您想转载本文章请注明转载地址"http://www.cnblogs.com/XHJT/p/3877236.html "谢谢-- 1.String中的equals和==的 ...

  3. Java笔记---枚举类和注解

    Java笔记---枚举类和注解 一.枚举类 自定义枚举类 方式一:JDK5.0之前自定义枚举类 class Seasons { //1. 声明Seasons对象的属性 private final St ...

  4. Java中String类的方法及说明

    String : 字符串类型 一.      String sc_sub = new String(c,3,2);    //      String sb_copy = new String(sb) ...

  5. java.lang.String 类的所有方法

    java.lang.String 类的所有方法 方法摘要 char charAt(int index) 返回指定索引处的 char 值. int codePointAt(int index) 返回指定 ...

  6. java中String类学习

    java中String类的相关操作如下: (1)初始化:例如,String s = “abc”; (2)length:返回字符串的长度. (3)charAT:字符操作,按照索引值获得字符串中的指定字符 ...

  7. 深入分析Java的String类的方法与特点

    字符串是任何编程语言都必须支持的变量类型,有些编程语言是直接提供了原生的变量类型,有些编程语言则使用语法特性以 SDK 的形式提供支持.在Java编程平台中,对字符串的支持使用了后者的形式,就是通过在 ...

  8. java 中String类的常用方法总结,带你玩转String类。

    String类: String类在java.lang包中,java使用String类创建一个字符串变量,字符串变量属于对象.String类对象创建后不能修改,StringBuffer & St ...

  9. 在java中String类为什么要设计成final

    在java中String类为什么要设计成final? - 胖胖的回答 - 知乎 https://www.zhihu.com/question/31345592/answer/114126087

  10. java中String类为什么不可变?

    在面试中经常遇到这样的问题:1.什么是不可变对象.不可变对象有什么好处.在什么情景下使用它,或者更具体一点,java的String类为什么要设置成不可变类型? 1.不可变对象,顾名思义就是创建后的对象 ...

随机推荐

  1. HDU 1501 Zipper(DP,DFS)

    意甲冠军  是否可以由串来推断a,b字符不改变其相对为了获取字符串的组合c 本题有两种解法  DP或者DFS 考虑DP  令d[i][j]表示是否能有a的前i个字符和b的前j个字符组合得到c的前i+j ...

  2. openstack shelve/unshelve/stop浅析

    声明: 本博客欢迎转发,但请保留原作者信息! 博客地址:http://blog.csdn.net/halcyonbaby 内容系本人学习.研究和总结,如有雷同,实属荣幸! stop的虚拟机仅仅是将虚拟 ...

  3. 使用.NET REACTOR制作软件许可证

    原文:使用.NET REACTOR制作软件许可证 软件下载地址:http://www.eziriz.com/downloads.htm 做一个简单的许可证系统,下面是具体步骤: 1,  OPEN AS ...

  4. sql性能

    ---正在运行的 select a.username, a.sid,b.SQL_TEXT, b.SQL_FULLTEXT   from v$session a, v$sqlarea b where a ...

  5. EasyUI的后台界面

    EasyUI的后台界面搭建及极致重构 〇.前言 要了解一个东西长什么样,至少得让我们能看到,才能提出针对性的见解.所以,为了言之有物,而不是凭空漫谈,我们先从UI说起,后台管理页面的UI我们将使用应用 ...

  6. MonkeyRunner源码分析之工作原理图-attach

    花了点时间整理了下MonkeyRunner的工作原理图: Item Description Warning Author 天地会珠海分舵 转载请注明出处! Blog Address http://bl ...

  7. SQL点滴12—SQL Server备份还原数据库中的小把戏

    原文:SQL点滴12-SQL Server备份还原数据库中的小把戏 备份数据库时出现一个不太了解的错误 ,错误信息“is formatted to support  1 media families, ...

  8. IT行业新名词--透明手机/OCR(光学字符识别)/夹背电池

    透明手机 机身设计的一大关键部分是可替换玻璃的使用,利用导电技术,在看不到线路的环境下,让LED发光. 这样的玻璃内含液晶分子,对于内容的显示则是通过电流对分子的刺激来实现.当手机断电后,分子位置会随 ...

  9. SSIS中执行SQL任务组件参数传递的问题

    原文:SSIS中执行SQL任务组件参数传递的问题 症状: 执行SQL任务,传递参数到子查询中,执行报错. 错误: 失败,错误如下:"无法从使用 sub-select 查询的 SQL 语句中派 ...

  10. 自己写RTPserver——大约RTP协议

    自己写RTPserver--大约RTP协议 本文将带领你一步一步地实现一个简单的手RTP变速器server,旨在了解RTP流媒体传输协议以及有关多媒体编解码器的一些知识. RTP协议的必备知识 要动手 ...