【Java学习笔记】基础知识学习7【字符串相关】

今天,我们就进入字符串的学习吧。

字符串,在java中是作为对象进行处理的,不死简单的对很多的char进行的一个连合。


java中的字符串String都是对象。

它们的构造方法(或者说通俗点,String类型变量的定义方法,这个对于C,VB学习者会好理解些)

例如(根据字符常量建立字符串):

String k="123";   //是创建了一个值为“123”的String类的对象

String k=new String("123");  //这个语句可以和上面达到同样的效果


不仅如此,还可以根据字节数组来创建字符串。字节数组中的内容,在创建字符串时被认为是字符的ascii编码,或者unicode编码等等。。

方法是:new String(byteArray)


上面的是按照字节数组创建字符串对象,但是并没有限制bytearray的字符集,也就是说,没有指明字节数组中的数据该被如何理解。

通过:new String(byteArray,charsetName)

可以通过设置charsetName(字符集名),来控制字节数组中的数据,被解析成某个字符集下的文字。

除了字节数组,我们还可以将字符数组作为原料,来创建字符串。这个很容易理解:字符数组是一堆单个字符的集合,按照数组的下标顺序连接起来,就可以构成对应的字符串对象了。


有了字符串对象(或者有人喜欢称为变量),我们就需要探究了解它的属性和方法。从而能够自如的使用它。

首先一点就是要知道这个字符串的长度,也就是有多少个字符在这个字符串中。测试代码如下:

	void showStringLength(){
		String kString="";
		String nString=null;
		T.O("空字符串长度:"+kString.length());
		T.O("null字符串长度:"+nString.length());
	}
可以从代码中看到,使用string对象.length()可以获得字符串的长度。


有特例需要说明:如果字符串是如上面nString一样的null,就无法获得长度信息。对于一个null字符串,没有长度信息。因为一个字符串为null的时候,里面是没有信息的,所以不可能有长度。一个空字符串,例如这里的kString,是有内容的,虽然内容为空,但是可以计算长度,长度值为0;

可以这样理解:

开办一个银行账号等同于定义一个字符串变量;

开一项业务,相当于给字符串增加了内容;

这个业务的值为0,类似于一个字符串内容为空。

业务的值不为0,类似于字符串中有文字;

业务没有办理,只存在银行账号,类似于字符串的值为null(我的值就是没有值)


那么,有了一段字符串,自然我就会想到从这里面获取我要的内容,也就是截取文本。

【方法1:从某个点开头,截取后面全部内容】

截取文本使用的是String这个类的substring(子字符串)方法。

	void GetSubString(){
		String sunsoftString="I Love Michael Jackson";
		String getPart1=sunsoftString.substring(0);
		String getPart2=sunsoftString.substring(1);
		String getPart3=sunsoftString.substring(2);
		T.O("从第0个位置开始截取的是:["+getPart1+"]");
		T.O("从第1个位置开始截取的是:["+getPart2+"]");
		T.O("从第2个位置开始截取的是:["+getPart3+"]");
	}
语法是: String java.lang. String .substring(int beginIndex)

这里的beginIndex是开始位置。这个方法是把字符串从beginIndex开始一直到尾部的字符串都截取出来作为返回值。

需要注意的是,这里,字符串的第一个字符的序号是0,和数组是相同的情况,可以类比记忆。

比如我们需要把从第5个字符开始的所有内容截取下来,我们就需要substring(4)。

【方法2:截取两点间的字符串,含这两点自身】

语法是:String java.lang.String.substring(int beginIndex, int endIndex)

意义是将字符串中,序号为beginIndex到序号为endIndex-1的内容截取下来。上例子:

	void GetSubString(){
		String sunsoftString="I Love Michael";
		String getPart1=sunsoftString.substring(0);
		String getPart2=sunsoftString.substring(1);
		String getPart3=sunsoftString.substring(2);
		T.O("从第0个位置开始截取的是:["+getPart1+"]");
		T.O("从第1个位置开始截取的是:["+getPart2+"]");
		T.O("从第2个位置开始截取的是:["+getPart3+"]");
		
		String getPart4=sunsoftString.substring(0, 6);
		String getPart5=sunsoftString.substring(1, 6);
		String getPart6=sunsoftString.substring(2, 6);
		String getPart7=sunsoftString.substring(3, 6);
		T.O("");
		T.O("从第0-6的是:["+getPart4+"]");
		T.O("从第1-6的是:["+getPart5+"]");
		T.O("从第2-6的是:["+getPart6+"]");	
		T.O("从第3-6的是:["+getPart7+"]");	
	}

我这里使用的字符串是:(我将序号和对应的字符列在下表中了,空的表示空格)

012345678910111213
I Love Michael
所以,我们可以看看具体的例子的原理。

根据实际运行结果:

substring(0,6)得到的是:I_Love

(这上面,下划线表示空格)

我们可以看出,0-6实际上是从标号为零,的“I”开始,截取到标号为5的“e”结束。

也就是说,substring在截取文字中的一段的时候,是从beginIndex到endIndex-1的地方截取,不包括endIndex对应的字符,包括beginIndex包括的字符。这个一定要重视和铭记。这个和VB里面是很不一样的。


知道了字符串的截取,我们还需要知道字符串的分割。

分割字符串。就是我们根据一个字符串将另一个字符串分成好几个部分,作为字符串数组返回:

举例说吧,有个字符串:“i love to ,dance on the,floor only if,you will help,me or i will have to go”(双引号内的为字符串)

我根据逗号来分割,可以得到:“i love to ”,“dance on the”,“floor only if”,“you will help”,“me or i will have to go

再假设我根据“on”来分割,可以得到:“i love to ,dance ”,“ the,floor ”,“ly if,you will help,me or i will have to go

分割的简单理解是:我们标记所有分割字符串所在的位置,然后在这些位置下刀,砍断这些字符串,将得到的一些分散开的字符串集合起来成为数组。

下面,就演示分割的代码:

	void StringSplit(){
		String iloveString="we,are,the,world";
		String splited[]=iloveString.split(",");
		for (String string : splited) {
			T.O("分割字符串:"+string);
		}
	}

可见,“we,are,the,world”将被逗号分割成4个字符串。输出结果证明这个方法是正确的。


这里的分割是将所有的分割结果都作为字符串,并集合成字符串数组返回。

还有一种分割,就是将字符串分割,只返回指定个数的字符串数组:String[] java.lang.String.split(String regex, int limit)

这里的regex就是分割符或者分割的正则表达式,limit是返回几个字符数组,代码如下:

	void StringSplit(){
		String iloveString="we,are,the,world";
		String splited[]=iloveString.split(",",3);
		for (String string : splited) {
			T.O("分割字符串:"+string);
		}
	}
运行结果如下:

分割字符串:we
分割字符串:are
分割字符串:the,world
也就是说,3表示将返回结果分为3个字符串。前两个是已经分割好的,最后一个是剩余未分割的。

可以得出结论,对于设置的值limit,前limit-1个是已经分割号的,最后一个是剩余的字符串。

由于这里“we,are,the,world”按照逗号来分割,只可以分割成4个字符串。如果设置是limit>=4,也只能显示四个字符串。下面给出limit不同值下的返回结果:

limit=1:

分割字符串:we,are,the,world

limit=2

分割字符串:we
分割字符串:are,the,world

limit=3

分割字符串:we
分割字符串:are
分割字符串:the,world

limit=4

分割字符串:we
分割字符串:are
分割字符串:the
分割字符串:world

limit=5

分割字符串:we
分割字符串:are
分割字符串:the
分割字符串:world

可以看出limit超过4(本例子可分割得到的最大字符串数)的时候,返回的字符数组都和limit等于4的时候相同。

上面的详细数据列举就是希望能帮助大家理解。


再接着,就需要对字符串进行清理空格的操作了:

String.trim();会返回一个清除了前导空格、tab和尾部空格tab的字符串,实例如下:

	void ClearSpace(){
		String emp="   sd  s d  ";
		emp=emp.trim();
		T.O("["+emp+"]");
	}

返回值是:“sd  s d” (双引号内为返回值)


接下来,需要在字符串中寻找我需要的内容,也就是字符串搜索:


String.indexOf(字符串或字符);  //返回字符串或字符的首次出现位置。

实例:

	void LocateString(){
		String loc="i was looking for a song";
		Easy.ShowL("for的位置是:"+loc.indexOf("for"));
	}

结果显示"for"在14这个位置找到了。我检查了后发现,如果第一个字符为0位置,则第14位置就是for这个字符首字母“f”的位置。


还有一个类似的就是lastindexOf,也是获取位置,不过这个是获取最后一个匹配项的位置:返回值依然是搜索词的首字母的位置。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值