String(一)


字串是具有内置语言支持的标准对象。

String类提供了很多功能。String对象时不可改变(只读)的,因此Java还为可变的字符串提供了StringBuffer类。

1String对象是不可变的。

查看JDK文档你就会发现,String类中每一个看起来会修改String得方法,

实际上都是创建了一个全新的String对象,以包含修改后的字符串内容。而最初的String对象则丝毫未动。

看以下代码:

public class Immutable
{
	public static String upcase(String str){
			return str.toUpperCase();
			}
	public static void main(String args[]){
		String q = "hello";
		System.out.println(q);

		String upQ = upcase(q);
		System.out.println(upQ);
		System.out.println(q);
	}
}
/*---------- 运行java程序 ----------
hello
HELLO
hello

输出完成 (耗时 0 秒) - 正常终止*/

当把q传给upcase()方法时,实际传递的是引用的一个拷贝。其实每当把String对象作为方法的参数时,都会复制一份引用,而该引用所指的对象其实一直待在单一的物理位置上,从未动过。


2String上的操作

方法

参数,重载版本

应用

构造器

重载版本:默认版本,StringStringBuilderStringBufferchar数组,byte数组

创建String对象

length()

String中字符的个数

charAt()

Int索引

取得String中该索引位置上char

getChars(),getBytes()

要复制部分的起点和终点索引,复制的目标数组,目标数组的起始索引

复制charbyte到一个目标数组

toCharArray()

生成一个char[],包含String的所有字符

equals(),equalsIgnoreCase()

与之进行比较的String

比较两个String的内容是否相同

compareTo()

与之进行比较的String

按词典顺序比较String的内容,比较结果为负数、零或正数。注意,大小写不等价

contains()

要搜索的CharSequence

如果该String对象包含参数的内容,则返回true

contentEquals()

与之进行比较的CharSequenceStringBuffer

如果该String对象包含参数的内容,则返回true

startWith()

可能的起始String。重载版本在参数中加了偏移量

返回boolean结果,以表明该String是否以此参数起始

endWith()

String可能的后缀String

返回boolean结果,以表明此参数是否为该字符串的后缀

indexOf(),lastIndexOf()

重载版本包括:charchar与起始索引,StringString与起始索引

如果该String并不包含此参数,就返回-1,否则返回此参数在String中的起始索引。lastIndexOf是从后向前搜索

subString(subSequence())

重载版本:起始索引;起始索引+终点坐标

返回一个新的String,以包含参数指定的子字符串

Concat()

要连接的String

返回一个新的String对象,内容为原始String连接上参数String

replace()

要替换掉的字符,用来进行替换的新字符。也可以用一个CharSequence来替换另一个CharSequence

返回替换字符后的新String对象。如果没有替换发生,则返回原始的String对象

toLowerCase() toUpperCase()

将字符的大小改变后,返回一个新String对象。如果没有改变发生,则返回原始的String对象

trim()

String两端的空白字符删除后,返回一个新的String对象。如果没有改变发生,则返回原始的String对象

valueOf()

重载版本:Objectchar[];char[],偏移量,字符个数;booleancharintlongfloatdouble

返回一个表示参数内容的String

intern()

为每个唯一的字符序列生成一个仅生成一个String引用

来看看一个小练习

/*
    编写一个方法计算字符串中给定字符出现的次数
*/
public class GetCharNum
{
	public static void main(String args[]){
		String str = "abcsdgjeosjdgsajoegtjeiogk";
		int charNum = getNum(str,'g');
		System.out.println(charNum);
	}
	public static int getNum(String str,char foo){
		//将字符串转为字符数组
		char[] newStr = str.toCharArray();
		//定义计数器
		int count = 0;
		/*
		   通过indexOf和lastIndexOf来确定上下边界,减少检索次数。
		*/
		for(int i=str.indexOf(foo);i<=str.lastIndexOf(foo);i++){
			if(newStr[i] == foo)
				count++;
		}
		return count;
	}
}






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值