1:String类:字符串(重点)
(1)多个字符组成的一个序列,叫字符串。
生活中很多数据的描述都采用的是字符串的。而且我们还会对其进行操作。
所以,java就提供了这样的一个类供我们使用。
(2)创建字符串对象
A:String():无参构造
**举例:
String s = new String();
s = "hello";
sop(s);
B:String(byte[] bys):传一个字节数组作为参数 *****
**举例
byte[] bys = {97,98,99,100,101};
String s = new String(bys);
sop(s);
C:String(byte[] bys,int index,int length):把字节数组的一部分转换成一个字符串 *****
**举例
byte[] bys = {97,98,99,100,101};
String s = new String(bys,1,2);
sop(s);
D:String(char[] chs):传一个字符数组作为参数 *****
**举例
char[] chs = {'a','b','c','d','e'};
String s = new String(chs);
sop(s);
E:String(char[] chs,int index,int length):把字符数组的一部分转换成一个字符串 *****
**举例
char[] chs = {'a','b','c','d','e'};
String s = new String(chs,1,2);
sop(s);
F:String(String str):把一个字符串传递过来作为参数
char[] chs = {'a','b','c','d','e'};
String ss = new String(s);
sop(ss);
G:直接把字符串常量赋值给字符串引用对象(最常用) *****
**举例
String s = "hello";
sop(s);
(3)面试题
A:请问String s = new String("hello");创建了几个对象。
两个。一个"hello"字符串对象,在方法区的常量池;一个s对象,在栈内存。

B:请写出下面的结果
String s1 = new String("abc");
Strign s2 = new String("abc");
String s3 = "abc";
String s4 = "abc";

sop(s1==s2); //false
sop(s1==s3); //false
sop(s3==s4); //true
C:字符串对象一旦被创建就不能被改变。
指的是字符串常量值不改变。
(4)字符串中各种功能的方法
A:判断
**** boolean equals(Object anObject):判断两个字符串的内容是否相同,复写了Object的方法
**** boolean equalsIgnoreCase(String anotherString):判断两个字符串的内容是否相同,
不区分大小写
**** boolean contains(String s):判断一个字符串中是否包含另一个字符串
注意:判断字符串是否包含特殊字符.直接表示为str.contains(".")
boolean endsWith(String suffix):测试此字符串是否以指定的后缀结束
boolean startsWith(String suffix):测试此字符串是否以指定的前缀开始
boolean isEmpty():测试字符串是否为空
B:获取
***** int length():返回此字符串的长度
***** char charAt(int index):返回指定索引处的 char值
***** int indexOf(int ch):返回指定字符在此字符串中第一次出现处的索引。
int indexOf(int ch, int fromIndex):返回在此字符串中第一次出现指定字符处的索引,
从指定的索引开始搜索。
int indexOf(String str):返回指定子字符串在此字符串中第一次出现处的索引。
int indexOf(String str, int fromIndex):返回指定子字符串在此字符串中第一次
出现处的索引,从指定的索引开始。
*** int lastIndexOf(int ch):返回指定字符在此字符串中最后一次出现处的索引。
int lastIndexOf(int ch, int fromIndex)
返回指定字符在此字符串中最后一次出现处的索引,从指定的索引处开始进行反向搜索。
int lastIndexOf(String str)
返回指定子字符串在此字符串中最右边出现处的索引。
int lastIndexOf(String str, int fromIndex)
返回指定子字符串在此字符串中最后一次出现处的索引,从指定的索引开始反向搜索。
***** String substring(int beginIndex) (注意:该方法substring的String是小写!!!)
返回一个新的字符串,它是此字符串的一个子字符串。
String substring(int beginIndex, int endIndex) (注意该方法的String是小写!!!)
返回一个新字符串,它是此字符串的一个子字符串,包含头不包含尾。
C:转换
***** byte[] getBytes():(很常用!)从字符串到字节数组的方法
void getChars(int srcBegin, int srcEnd, char[] dst, int dstBegin)
将字符从此字符串复制到目标字符数组。
***** char[] toCharArray():(很常用!)从字符串到字符数组的方法
**** static String copyValueOf(char[] data)
返回指定数组中表示该字符序列的 String。
static String copyValueOf(char[] data, int offset, int count)
返回指定数组中表示该字符序列的 String。
***** static String valueOf(数据类型):把该数据类型的数据转换成字符串。
*** String toLowerCase():把字符串转换成小写
String toUpperCase():把字符串转换成大写
*** 字符串的连接
String concat(String str):将指定字符串连接到此字符串的结尾。
D:替换
String replace(char oldChar, char newChar):用新字符替换旧字符(替换所有)
String replace(String target, String replacement):用新的子串换旧串
E:分割
String[] split(String regex):根据指定的字符串把一个字符串分割成一个字符串数组
F:
String trim():去除字符串的前后空格
G:
int compareTo(String anotherString)
按字典顺序比较两个字符串。
int compareToIgnoreCase(String str)
按字典顺序比较两个字符串,不考虑大小写。
(5)练习
1:模拟登录,给三次机会,并提示还有几次.
默认的用户名和密码为admin。 区分大小写。
自己从键盘输入用户名和密码。

2:给定一个字符串统计,统计大写字母,小写字母,数字出现的个数.
***注意:不包括特殊字符
从键盘输入一个不包含特殊字符的字符串(只有26个字母和0-9组成)。

3:给定一个字符串,把它变成首字母大写,其他字母小写的字符串.
从键盘输入一个字符串,全部26个字母组成的。

4:子串在整串中出现的次数。
也就是说:获取一个字符串中,指定的字串在该字符串中出现的次数.
例如:
"nbasdnbafllgnbahjnbakqqqqlnba" 在这个字符串中,多有个nba.

5:对字符串中字符进行自然顺序排序。
"basckd"-->"abcdks"

先留做思考内容:
6:两个字符串的最大相同子串。
两个字符串的最大相同子串。
比如:
"sadabcdfghjkl"
werabcdtyu"

2:StringBuffer
(1)字符串的缓冲区,是一个容器。
(2)它和String的区别
它是缓冲区可变长度的。
(3)构造方法
StringBuffer() 构造一个其中不带字符的字符串缓冲区,初始容量为 16 个字符。
StringBuffer(int num) 构造一个不带字符,但具有指定初始容量的字符串缓冲区。
StringBuffer(String str) 构造一个字符串缓冲区,并将其内容初始化为指定的字符串内容。
(4)常用方法
A:增加数据
**append :添加各种类型的数据
**insert : 在容器指定位置插入各种类型的数据。
B:删除数据
**deleteCharAt : 删除指定位置的字符
**delete 还可以用于清空StringBuffer的缓冲区
C:替换
**replace
D:获取
**charAt
E:长度和容量
**length() 元素的个数
**capacity 元素的理论值
F:获取元素的位置
**indexOf
**lastIndexOf
G:截取
**substring(int start)
**substring(int start,int end)
H:反转
**reverse
(5)字符串和StringBuffer的转换
String-->StringBuffer通过构造:
如:StringBuffer sb = new StringBuffer(String str)
StringBuffer--String通过toString方法
如:StringBuffer sb = new StringBuffer();
sb.toString();

3:StringBuilder
和StringBuffer的功能是一样的,但是有区别:
StringBuffer(JDK1.0)是线程安全的。
StringBuilder(JDK1.5)不保证线程安全。

一般来说,我们写的程序都是单线程的,所以,用StringBuilder,效率高。

JDK版本的升级原则:
A:提高效率
B:提高安全性
C:简化书写

Java基础之String、StringBuffer、StringBuilder的更多相关文章

  1. 【Java基础】String StringBuffer StringBuilder

    String String是不可变的 我们都知道String不是基本数据类型,而是一个对象,并且是final类型的,不可变的.(public final class String) 查看以下代码: S ...

  2. Java基础知识 String StringBuffer StringBuilder三者的区别(面试题)

    相同点:String.StringBuffer.StringBuilder最终底层存储与操作的都是char数组,StringBuffer和StringBuilder都继承了AbstractString ...

  3. java 基础 5 String StringBuffer StringBuilder

    String是不可变的,原因 1是可以缓存hash值,因为String的hash值经常被使用,例如String用作HashMap等.不可变特性  使得hash值不变,因此只需要进行一次计算: 2Str ...

  4. Java学习笔记--String StringBuffer StringBuilder

    String StringBuffer StringBuilder String http://docs.oracle.com/javase/7/docs/api/ 中文: http://www.cn ...

  5. 浅谈 Java 字符串(String, StringBuffer, StringBuilder)

    我们先要记住三者的特征: String 字符串常量 StringBuffer 字符串变量(线程安全) StringBuilder 字符串变量(非线程安全) 一.定义 查看 API 会发现,String ...

  6. 重温java中的String,StringBuffer,StringBuilder类

    不论什么一个系统在开发的过程中, 相信都不会缺少对字符串的处理. 在 java 语言中, 用来处理字符串的的类经常使用的有 3 个: String.StringBuffer.StringBuilder ...

  7. JAVA基础之——String、StringBuilder、StringBuffer区别和使用场景

    本文主要讲解String.StringBuilder.StringBuffer区别和应用场景 本文以jdk1.8为例 1 String 操作过程:每次赋值时新建一个String对象. 2 String ...

  8. Android/Java 中的 String, StringBuffer, StringBuilder的区别和使用

    Android 中的 String, StringBuffer 和 StringBuilder 是移动手机开发中经常使用到的字符串类.做为基础知识是必须要理解的,这里做一些总结. A.区别 可以从以下 ...

  9. 在JAVA中,String,Stringbuffer,StringBuilder 的区别

    首先是,String,StringBuffer的区别 两者的主要却别有两方面,第一是线程安全方面,第二是效率方面 线程安全方面: String  不是线程安全的,这意味着在不同线程共享一个String ...

  10. Java基础(32):String与StringBuilder、StringBuffer的区别(String类)

    在Java中,除了可以使用 String 类来存储字符串,还可以使用 StringBuilder 类或 StringBuffer 类存储字符串,那么它们之间有什么区别呢? String 类具有是不可变 ...

随机推荐

  1. AD帐户操作C#示例代码(一)——导入用户信息

    最近写了一个AD帐户导入的小工具(为啥写作“帐”户呢?),跟大家分享下相关代码,欢迎各位高手指教! 首先,我准备一个这样的Excel文件作为导入模版,并添加了一些测试数据. 然后,我打开Visual ...

  2. 攻破JAVA NIO技术壁垒

    转载自攻破JAVA NIO技术壁垒 概述 NIO主要有三大核心部分:Channel(通道),Buffer(缓冲区), Selector.传统IO基于字节流和字符流进行操作,而NIO基于Channel和 ...

  3. Android Studio Gradle 问题 解决方案

    将AS2.0升到2.1.3出现的问题: Error:No service of type Factory  available in ProjectScopeServices. 在项目中找到build ...

  4. what is a ear

    http://docs.oracle.com/javaee/6/tutorial/doc/bnaby.html An EAR file (see Figure 1-6) contains Java E ...

  5. Linux下VirtualBox启动物理硬盘上已安装的Window 8系统

    创建虚拟机 1.创建一个没有硬盘的windows虚拟机,与已安装在物理硬盘上的系统一致.2.通过命令行在创建的虚拟机目录下创建一个指向物理硬盘的虚拟硬盘 VBoxManage internalcomm ...

  6. :尝试加载 Oracle 客户端库时引发 BadImageFormatException。如果在安装 32 位 Oracle 客户端组件的情况下以 64 位模式运行,将出现此问题。 ---> System.BadImageFormatException: 试图加载格式不正确的程序。

    iis有程序池有一个属性  是否启用32位应用程序默认是true的特别注意windows2008 服务器系统iis默认的是true 这样发布一下也是必须要做的

  7. easyui的datagrid多次调用action的原因

    今天碰见一个非常奇怪的问题,一个页面的datagrid正常,另一个页面的datagrid两次调用action代码,比较两个页面datagrid的使用方法,并没有不同.后经仔细debug,发现问题所在: ...

  8. Android 向系统日历中添加事件

    查了一天半,总算有点大概了.以下是自己的理解,有错误的地方望指正. android系统有日历功能,应用程序可以根据一些接口开发自己的功能,即使是日历app也是根据这些接口开发的,所以我们可以利用程序向 ...

  9. NGUI 3.0.7的新锚点系统设置不好就会造成显示错误的错觉

    每次设置NGUI控件的锚点时,都需要刷新一下窗口,不然就会造成显示错误的错觉. 同时,NGUI控件设置锚点的参考对象为一个物体时还需要调整其控件大小,不然也会造成显示错误的错觉.

  10. JavaScript 基础第十天

    学习总结 1定时器 ①.setTimeout() // 间隔多长时间执行一次(会返回一个数字型的标识) ②.setInterval() // 间隔多长时间执行,是不断地执行. ③.clearTimeo ...