java学习第13天--String-StringBuffer-StringBuilder

String字符串
定义|创建字符串
String字符串和char字符不同,char使用单引号,只能表示一个字符,字符串就是一段文本。 String是个类 。这个类使用final修饰,所以这个类是不可以继承扩充和修改它的方法的。String类又特别常用,所以在对String对象进行初始化时,它可以不像其它对象一样,必须使用new关键字构造对象。字符串广泛应用在Java编程中.在java中字符串属于对象,Java提供了一种简化的特殊语法。
String对象一旦创建完成就不能改变,如果需要进行大量的字符串修改操作,应该使用 StringBuffer 或者 StringBuilder 类或者字符数组,最终结果可以被转换成String对象.


使用String对象存储字符串:
String s = "有志者事竟成" ;
当然我们也还是可以像以前使用new关键字的。
String s = new String( "有志者事竟成" );

注意:
String类是不可改变的,所以你一旦创建了String对象,那它的值就不能被改变了.但是如果需要对字符串做修改,那么应该选择使用 StringBuffer & StringBuilder

String字符串的常用方法
String类位于 java.lang 包中,java会默认的导入java.lang包,所以我们使用java.lang包的类时,不需要显示的import类,String类具有丰富的方法,其中比较常用的有:
1.计算字符串的长度
2.连接字符串
3.比较字符串
4.提取字符串
5.替换字符串

1. 计算字符串的长度
用于获取有关对象的信息的方法称为 访问器方法.String类的一个访问器方法是 length()方法,它返回字符串对象包含的字符数.
public class Demo5 {
public static void main(String[] args) {
String str = " www.baidu.com ";

//计算字符串长度
// int len = str.length();
// System.out.println("包括空格的字符串的长度为:" + len);
System.out.println("包括空格的字符串的长度为:" + str.length());//另一种表示方法
//因为空格也算是字符串的长度,如果不想计算前后的空格,也可以使用trim()方法把前后的空格去掉
System.out.println("不包括空格的字符串的长度为:" + str.trim().length());
String name = "丛中之";
System.out.println("字符串的长度为:" + name.length());//一个汉字占一个字符
}
}

2.连接字符串
连接字符串有两种方法:方法1:使用“+”。方法2:使用String类的concat()方法。
public class Demo5 {
public static void main(String[] args) {
String str = " www.baidu.com ";
System.out.println("czz" + str);
System.out.println(str.concat("czz"));
}
}

3.比较字符串
字符串的比较方法有很多,如比较两个字符串是否相等,比较后返回值是个布尔值。
public class Demo5 {
public static void main(String[] args) {
String str = " www.baidu.com ";
//比较字符串
String str2 = " www.baidu.com ";
if(str.equals(str2)){
System.out.println("相等");
}else{
System.out.println("不相等");

//判断是都以某个字符开头或者结尾
System.out.println(str.startsWith("www"));
System.out.println(str.endsWith("com"));
}
}
}

4.提取字符串
public int indexOf(int ch) 搜索第一个出现的字符ch
public int indexOf(String value) 搜索第一个出现的字符串value
public int lastIndexOf(int ch) 搜索最后一个出现的字符ch
public int lastIndexOf(String value) 搜索最后一个出现的字符串value

public class Demo5 {
public static void main(String[] args) {
String str = "www.baidu.com ";
System.out.println(str.indexOf("w"));
System.out.println(str.indexOf("b"));
System.out.println(str.indexOf("www"));
System.out.println(str.lastIndexOf("m"));
}
}

截取字符串
注意下标也是从0开始的。
System.out.println(email.substring(3)); //从第4个(包括第四个)开始截取到最后
System.out.println(email.substring(3, 5));
indexOf方法和substring方法经常一起使用,比如我们要截取@之后的所有字符串,我们可以结合这个两个。
System.out.println(email.substring(email.indexOf( "@" )+1));

5. 替换字符串
可以把所有的字符串c换成字符串z
System.out.println(str.replace("c","z"));

StringBuffer
StringBuffer用于表示可以修改的字符串
构造方法
构造方法
说明
public StringBuffer()
保留了17个字符的空间
public StringBuffer(int length)
设置缓存器大小
public StringBuffer(String value)
接收字符串参数,用来设置初始内容,并不再重新分配
常用方法:
StringBuffer insert(String s)
在指定位置插入布尔值的字符串表示
insert(int offset, int i)
将int参数的字符串表示形式插入此序列中
StringBuffer append(String s)
将指定的字符串追加到此字符序列
int length()
确定StringBuffer对象的长度
int indexOf(String str)
查找某个字符在字符串中的第一次出现的下标或者索引
void setCharAt(int pos,char ch)
使用ch指定的新值设置pos指定的位置上的字符
String toString()
转换为字符串形式
StringBuffer reverse()
反转StringBuffer对象中的字符
StringBuffer delete(int start,int end)
此方法将删除调用对象中从start位置来时直到end指定的索引-1位置的字符序列
replace(int start, int end, String str)
使用给定String中的字符替换此序列的子字符的字符

// 字符设置和替换
// setCharAt( int index, char ch),将指定的字符ch放到index指出的位置。
// charAt( int index) 获得指定位置的字符
StringBuffer s1 = new StringBuffer( "java" );
s1.setCharAt(1, 'u'); // 则s为 "juva"

// 字符的插入
// insert( int offset, char ch),在offset位置插入字符ch。
StringBuffer s2 = new StringBuffer( "wecome" );
s2.insert(2, 'l'); // 则s为 "welcome"

// 在字符串末尾添加内容(Append方法)
StringBuffer s3 = new StringBuffer( "中国" );
s3.append( "好" ); // 则s为 "中国好"
// 转换为不变字符串:toString()。
System.out.println(s3.toString());

// 获取字符串的长度: length()
StringBuffer s4 = new StringBuffer( "abc" );
System.out.println(s4.length());

// 获取字符串的容量
System.out.println(s4.capacity());

// 字符串反转
s4.reverse();
System.out.println(s4.toString());

// 删除指定字符串着中的字符
// delete ( int start, int end)
StringBuffer s5 = new StringBuffer( "Hello" );
s5. delete (0, s5.length()); // 删除字符串s的全部字符
System.out.println(s5.toString());
// delete CharAt( int index)
StringBuffer s6 = new StringBuffer( "Hello" );
s6. delete CharAt(4); // 删除字符串s索引为4的字符
System.out.println(s6.toString());

// 替换字符串
// replace( int start, int end,String str)
StringBuffer s7 = new StringBuffer( "Hello" );
s7.replace(0, 1, "qqq" );
System.out.println(s7.toString());

// substring( int start) //返回从start下标开始以后的字符串
StringBuffer s8 = new StringBuffer( "Hello" );
s8.substring(2);
System.out.println(s8.toString());
// substring( int start, int end) //返回从start到 end-1字符串
StringBuffer s9 = new StringBuffer( "Hello" );
s9.substring(2,3);
System.out.println(s9.toString());

下面方法和String类的方法类似
序号
方法描述
1
int capacity()
返回当前容量。
2
char charAt(int index)
返回此序列中指定索引处的  char  值。
3
void ensureCapacity(int minimumCapacity)
确保容量至少等于指定的最小值。
4
void getChars(int srcBegin, int srcEnd, char[] dst, int dstBegin)
将字符从此序列复制到目标字符数组  dst
5
int indexOf(String str)
返回第一次出现的指定子字符串在该字符串中的索引。
6
int indexOf(String str, int fromIndex)
从指定的索引处开始,返回第一次出现的指定子字符串在该字符串中的索引。
7
int lastIndexOf(String str)
返回最右边出现的指定子字符串在此字符串中的索引。
8
int lastIndexOf(String str, int fromIndex)
返回 String 对象中子字符串最后出现的位置。
9
int length()
 返回长度(字符数)。
10
void setCharAt(int index, char ch)
将给定索引处的字符设置为  ch
11
void setLength(int newLength)
设置字符序列的长度。
12
CharSequence subSequence(int start, int end)
返回一个新的字符序列,该字符序列是此序列的子序列。
13
String substring(int start)
返回一个新的 String,它包含此字符序列当前所包含的字符子序列。
14
String substring(int start, int end)
返回一个新的  String ,它包含此序列当前所包含的字符子序列。
15
String toString()
返回此序列中数据的字符串表示形式。

String和StringBuffer的区别
Java 中 StringBuffer 和 String 是有一定的区别的,首先,String 是被 final 修饰的,他的 长度是不可变的 ,就算调用 String 的 concat 方法,那也是把字符串拼接起来并重新创建一个对象,把拼接后的 String 的值赋给新创建的对象,而 StringBuffer 的长度是可变的 ,调用StringBuffer 的 append 方法,来改变 StringBuffer 的长度,并且,相比较于 StringBuffer,String 一旦发生长度变化,是非常耗费内存的!
String的不变性
当字符串string在内存中创建后,就不会再改变,所以对该字符串进行的所有改变操作,实际上都没有改变原来的字符串,你可以参考一下我们第一节,不过我们调用了原始的String的多少个方法,其实对原来的字符都不会有任何改变,都是重新生成一个新的字符串作为返回值,这就是所谓的Java String的不变性。
每一次的修改操作都会生成一个新的字符串,有一个不好的点——慢慢地消耗了内存,对GC来说也是非常费时的一件事,效率非常低,所以如果我们需要多次改变创建的字符串的话,那么使用String将会是个很不好的选择。
String与StringBuffer的区别
正是因为String是的不变性,StringBuffer或者StringBuilder就有他们的用武之地了,当然String有它的优点,就是使用方便,我们如何做出选择呢?一般如果字符串经常要做出修改,比如经常要拼接,删除等等,那么使用StringBuffer或者StringBuilder比较好,你可以在完成操作后使用 toString 方法转换为String类。

StringBuffer和StringBuilder的区别
StringBuilder和StringBuffer的方法是一样,区别是StringBuffer是线程安全,一个StringBuilder不是,你可以查看一下两个类的源码,StringBuffer的方法前面有synchronized关键字修饰。这个以后我们在讲解线程的时候会讲到。这里我们知道一下两者的区别即可:
StringBuffer线程同步,所以使用起来比较安全,但是效率较低主要是多线程和操作比较频繁是有有所体现。
StringBuilder正好相反不同步,效率高,但是多线程使用时可能会有问题。

练习:
1短串在长串中出现的次数
例:
String src = "abc1111ababb";
求"ab"出现的次数
提示:使用startsWith方法

两种方法,test1和test2
package com.StringBuffer;

public class StringBufferDemo2 {

public static void main(String[] args) {
//test1();
test2();
}

private static void test2() {
String str = "adjadfbvsadsjfo";
//定义计数变量
int count = 0;
String sub = "ad";
while(str.indexOf(sub) != -1){
count ++;
//截取子串
str = str.substring(str.indexOf(sub) + sub.length());
}
System.out.println(count);
}

private static void test1() {
String str = "adjadfbvsadsjfo";
//定义计数变量
int count = 0;
//循环判断截取后的子串是否以指定字符串开头,有则证明出现了一次指定字符串
while (str.length() != 0) {
//查找指定字符ad
if (str.startsWith("ad")) {
count++;
}
//从第二个字符开始截取子串
str = str.substring(1);
}
System.out.println(count);
}
}

2. 将字符串中每个单词反转,例如:
welcome to China
emoclew ot anihC

public static void main(String[] args) {
String s = "welcome to China";
String[] words = s.split(" ");

//创建StringBuffer对象
StringBuffer sb = new StringBuffer();

for (int i = 0; i < words.length; i++) {
StringBuffer sb2 = new StringBuffer(words[i]);
sb.append(sb2.reverse());
// words[i] = sb.reverse().toString();
sb.append(" ");
}

String res = sb.toString().trim();
System.out.println(res);
}

3.将数组中的元素以[1, 2, 3, 4]格式显示




猜你喜欢

转载自blog.csdn.net/czz1141979570/article/details/79975844
今日推荐