String和StringBuffer


基本上求职者进行笔试时没有不考字符串的。字符串也是一种相对简单的数据结构,结合指针,容易多次引起面试官反复发问。笔者曾不止一次在笔试或面试时遇到字符串试题。事实上,字符串也是一个考验程序员编程规范和编程习惯的重要考点。不能忽视这些细节,因为这些细节会体现你在操作系统、软件工程、边界内存处理等方面的知识掌控能力。

字符串是在程序开发中,随时随地都能用到的对象型数据,处理好字符串数据,对于程序开发来说,是至关重要的。字符串是由字符组成,在Java中,字符串是对象,是描述字符的基本数据结构。字符串是程序设计中很重要的一类数据结构,Java专门为存储和处理字符串提供了两类:StringStringBuffer,并且为其提供了大量的方法以方便程序员对字符串进行操作,善用这些方法将大大提高编程效率。

String类可以用来保存一个字符串,该类有大量的方法处理这个字符串,对字符串数据的任何操作都必须通过这些方法来进行。特别要注意的是,本类是最终类,不允许继承。

1String对象的创建

1)初始化

可以通过初始化的方式来创建对象,同时还为它赋值。比如:

String str="Hello";

2)使用关键字new

Java中,可以使用new关键字来创建String实例:

String str = new String ( );

它创建了一个新的String类对象,并把它赋给变量。但它还是一个空的字符串,接下来为这个字符串赋值:

s="nice";

将上面的代码合并,就可以产生一种更简单的字符串表示:

String s = new String("nice");

3)类型转换

Java中提供了大量的可以返回一个字符串的方法,用一个String变量接收这些返回值的同时就创建了该对象。

例如Integer类提供了一个静态方法toString(int i),返回一个表示指定整数的 String 对象将该参数转换为有符号的十进制表示形式,以字符串形式返回它,它的使用方法如下:

String str = Integer.toString(12345);

在str中存储的字符串为12345”。

2String方法的引用

String类是Java提供可对字符串进行操作了的两种类之一。它表示的是不变的字符串,不能直接对起内容进行修改。String对象是不变的。接下来还是主要来介绍String类的重要方法。(在这里我只对比较常用的方法进行举例说明),下面是String一些常用方法。如表5.2所示。

表5.2  String中的常用方法

方法

说明

char charAt(int index)

返回指定位置的字符

int compareTo(String anotherString)

比较本字符串与anotherString中的是否相等

int compareToIgnoreCase(String str)

同上,但忽略大小写

String concat(String str)

str串加到本对象中的字符串后面,返回这个新生成的串(注意:本字符串并没有变)

static String copyValueOf(char[] data)

用字符型数组data的值生成一个String对象,并返回

int indexOf(int ch)

返回字符ch在本字符串中出现的位置

int indexOf(String str)

返回字符串str在本字符串中出现的位置

int length()

返回本字符串的长度

String replace(char oldChar, char newChar)

将本字符串的oldChar字符用newChar字符代替,返回新生成的这个串(注意:本字符串并没有变)

String substring(int beginIndex, int endIndex)

从本字符串的beginIndex位置开始到endIndex-1位置结束,截取一个子串,并返回该子串

char[] toCharArray()

用本字符串生成一个字符型数组并返回

String toLowerCase()

将本字符串中的字符转换成小写字符,返回新生成的串(注意:本字符串并没有变)

String toUpperCase()

将本字符串中的字符转换成大写字符,返回新生成的串(注意:本字符串并没有变)

String trim()

将本字符串的头、尾空格去掉,返回新生成的串

q String求长度方法:public int length( )该方法返回用于调用该方法的String的长度。这是String类方法中最常见的一个方法。下面是一个具体使用length()的实例,代码如下:

package test;

 

public class StringClass_1 {

public static void main(String[] args) {

String str = "this is a dog";

System.out.println("str 的长度为:"+str.length());

}

}

运行结果为:

str 的长度为:13

注意:数组里有个属性是lengthString里是length()方法

q String截取方法:public String substring(int begin)public String substring(int begin,int end)这是两个重载的substring()方法,它返回字符串的子字符串。第一个参数代表子字符串的开始位置(从0开始),如果该调用只有一个参数,则返回的是从这个位置到最后的字符串。如果是第二种方法,第二个参数就代表结束的位置,但是不包括该位置的字符。下面是一个具体使用substring()的实例,代码如下:

package test;

 

public class StringClass_2 {

public static void main(String[] args) {

String str = "this is a dog";

String sub = str.substring(5);

String sub_1 = str.substring(2, 4);

System.out.println("sub 为:"+sub);

System.out.println("sub_1 为:"+sub_1);

}

}

运行结果为:

sub 为:is a dog

sub_1 为:is

第一句是从索引5开始,返回该String中的后半部分。第二句是从索引2开始,然后在索引4结束(但不包括4点字符)。

q String转字符数组方法:public String[] split(String regex)根据给定的正则表达式的匹配来拆分此字符串从而生成此数组。下面是一个具体使用split()的实例,代码如下:

package test;

 

public class StringClass_3{

public static void main(String[] args) {

String str = "this is a dog !";

String[] sArry = str.split(" ");

System.out.println("sArryr 的长度为:"+sArry.length);

for(int i=0;i<sArry.length;i++){

System.out.println(sArry[i]);

}

}

}

运行结果为:

sArryr 的长度为:5

this

is

a

dog

!

q String比较方法:public boolean equals(Object anObject),比较此字符串与指定的对象。当且仅当该参数不为 null,并且是表示与此对象相同的字符序列的 String 对象时,结果才为 true它覆盖了Object类中的equals()方法。下面是一个具体使用equals()的实例,代码如下:

package test;

 

public class StrEqualsDemo {

public static void main(String[] args) {

String a = "";

System.out.println(a.equals(null));

}

}

输出结果为:false

q String指定子字符串位置的方法:public int indexOf(String str)和public int indexOf(String str,int fromIndex),这两个方法都是返回第一次出现的指定子字符串str在此字符串中的索引,但是第一个方法是从该字符串的0开始搜索;而第二个方法则是从从指定的索引处开始

package test;

public class StrIndexOf Demo {

public static void main(String[] args) {

String str = "nice to meet you";

String subStr = "e";

int index  = str.indexOf(subStr);

int end = str.indexOf(subStr, 6);

System.out.println("from zero begin e="+index);

System.out.println("from six begin e="+end);

}

}

运行结果为:

from zero begin e=3

from six begin e=9


StringStringBuffer的区别(常见的面试题)

【考题题干】请说出StringStringBuffer的区别?

【参考答案】String的长度是不可变的,StringBuffer的长度是可变的。如果你对字符串中的内容经常进行操作,特别是内容要修改时,那么使用StringBuffer,如果最后需要String,那么使用StringBuffertoString()方法。


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值