您的位置:首页 > 职场人生

黑马程序员-->10_字符串操作

2014-01-15 13:13 330 查看
----------- android培训java培训、期待与您交流!
-----------
一、边界问题(面试题)

程序一

Integer m=128;

Integer n=128;

System.out.println("m==n是"+(m==n));

程序二

Integer m=127;

Integer n=127;

System.out.println("m==n"+(m==n));

输出结果:第一个是false,第二个是true

解释:因为byte类型的数据的范围是-128---127,如果当数值在byte范围的时候,对于新特性,如果在这个范围之内,就不会开辟新空间,如果超过这个范围,就会开辟一个新的空间,所以上面的当m==n==128的时候,超出了范围,就会重新开辟新的空间,所以不相同,所以为false。

二、基本数据类型对象包装类

1、基本数据类型 包装类:

byte  Byte

short  Short

int  Integer

long  Long

boolean  Boolean

double  Double

char  Character

 

2、基本数据类型对象包装类常见作用:

用于基本数据类型和字符串之间的相互转换!!(很简单的内容!)

三、转换的方法

1、字符串转换到别的数据类型(举例说明)

int a=Integer.parseInt("123");   //将字符串123转换成int类型的基本数据。

double b=Double.parseDouble("123");   //将字符串123转换成double类型的数据。

boolean c=Boolean.parseBoolean("true");  //将字符串“true”转换成boolean类型。

2、别的数据类型转换成字符串

基本数据+“”。    //比方说11+“”;就可以直接将int类型的11转换成字符串类型的数据

基本数据类型.toString(基本数据)。  //String dd=Double.toString(745839275.473892759);

3、十进制转换成别的进制

toBinaryString() //转换成二进制

toHexString() //转换成十六进制

toOctalString() //八进制(经常不用)

四、可变字符串StringBuffer(容器,字节缓冲区)

特点

1、长度可改变!

2、可以直接操作多个数据类型!

3、如果要输出,最终会通过toString方法变回字符串的。

重点

CURD:解释一下什么是CURD,分别是creat、update、read、delete

1、存储

StringBuffer append():将指定的数据作为参数添加到已有的数据结尾处

StringBuffer insert(index,数据):可以将数据插入到指定的位置

2、删除

StringBuffer delete(start,end):删除缓冲区的数据,包含start,不包含end

StringBuffer deleteCharAt(index):删除指定位置上的字符

3、获取

char charAt(int index):返回此序列中指定索引处的 char 值。

int indexOf(String str):返回第一次出现的指定子字符串在该字符串中的索引。

int lastIndexOf(String str):返回最右边出现的指定子字符串在此字符串中的索引(有点返回长度的意思)。

int length():返回长度。

String substring(int start,int end):返回一个新的 String,它包含此序列当前所包含的字符子序列。

4、修改

StringBuffer replace(start,end,string):使用给定 String 中的字符替换此序列的子字符串中的字符。

void setCharAt(int index,char ch):将给定索引处的字符设置为 ch。

5、反转

StringBuffer reverse():将此字符序列用其反转形式取代。

清空缓冲区

有时候会需要清空一下字符缓冲区,可以使用.delete()方法,很有效果!StringBuffered的代码例子就不列举了,跟StringBuilder的基本一样,下面有示例。

五、可变字符串StringBuilder(容器,字节缓冲区)

1、概念:

使用String定义的字符串是不能改变长度的,但是使用StringBuffer&StringBuilder创建的字符串变量可以任意改变字符串的长度。

2、区别:

(1)、StringBuffer是线程同步的,具有安全性,因为有synchronized安全锁(从1.0版本就有了)。

(2)、StringBuilder是线程不同步的,没有安全性,无synchronized安全锁,但是效率高(从1.5版本才开始有)。

3、总结:

所以之所以提出StringBuilder是因为它的高效率。

4、java升级的三大原因:

(1)、提高效率。

(2)、简化代码量。

(3)、提高安全性。

5、清空缓冲区:

有时候会需要清空一下字符缓冲区,可以使用.delete()方法,很有效果!下面是一个StringBuilder的小程式:

public class StringBuilderDemo {

/**
* @param args
*/
public static void out(Object obj){
System.out.println(obj);
}
public static void f(){
StringBuilder sb=new StringBuilder("你好");
sb.append(",是一个好人");
out("追加之后的内容:"+sb);
sb.insert(2, ",我叫***");
out("插入之后的内容:"+sb);
int cap=sb.capacity();
out("当前容量:"+cap);
sb.replace(12, 14, "学生");
out("替换后的内容是:"+sb);
sb.setCharAt(5, '马');
sb.setCharAt(6, '济');
sb.setCharAt(7, '亨');
out("指定之后的内容:"+sb);
sb.delete(10,12);
out("删除之后的内容是:"+sb);
sb.reverse();
out("反转之后的内容:"+sb);

}
public static void main(String[] args) {
// TODO Auto-generated method stub
f();
}

}

六、String类中一些常用小操作

1、转换(大小写转换)

String toUpperCase();

String toLowerCase();

2、将字符串两段多余的一个或多个空格去除

String trim();

3、将两个字符串进行自然顺序的比较

int compareTo(string);

4、替换

String replace(oldchar,newchar);

5、切割

String split(regex);

6、字串,获取字符串中的一部分

String substring(begin,end);

7、获取长度

int length();

8、根据位置获取该位置上字符

char charAt(int index);

9、根据字符获取字符所在位置

int indexOf(int ch);  //返回的是ch在字符串中第一次出现的位置。

int indexOf(int ch,int fromIndex); //从fromIndex指定的位置开始,获取ch在字符串中位置。

int indexOf(String str); //返回的是str在字符串中第一次出现的位置。

int indexOf(String str,int fromIndex); //从fromIndex指定的位置开始,获取str在字符串中位置。

int lastIndexOf(int ch); //返回指定字符在此字符串中最后一次出现处的索引。

10、字符串中是否指定内容开头

boolean startsWith(str);

字符串中是否指定内容结尾

boolean endsWith(str);

public class StringTestDemo {

/**
* @param args
*/
public static void out(Object obj){
System.out.println(obj);
}
public static void main(String[] args) {
// TODO Auto-generated method stub
String s1="C:\\RedHatLinux5";
String s2="C:\\RedHatLinux";
int num=0;
char c=s1.charAt(num);
out("索引"+num+"上的字符是:"+c);
int boo=s1.compareTo(s2);
if(boo==1)
out("内容不相同!");
else
out("内容相同!");
boolean boo1=s1.contains(s2);
if(boo1=true)
out("字符串"+s1+"包含字符串"+s2);
else
out("字符串"+s1+"不包含字符串"+s2);
int len=s1.length();
out("s1的长度是:"+len);
String s11=s1.replace(s1, "c:\\Android\\KitKat");
out("被替换后的s1是:"+s11);
String[] arr=s11.split("\\\\");
for(int i=0;i<arr.length;i++){
out("第"+(i+1)+"段内容:"+arr[i]);
}
String lower=s1.toLowerCase();
out("s1变成小写之后的内容是:"+lower);
}

}

七、字符串与数组的转换

1、字符数组转换成字符串

String(char[],offset,count):将字符数组中的一部分转换成字符串

其中静态方法:

static String copyValueOf(char[])

static String copyValueOf(char[] data,int offset,int count)

static String valueOf(char[])

2、字符串转换成字符数组

char[] toCharArray()

3、字节数转换成字符串

String(byte[])

String(byte[],offset,count)将字节数组中的一部分转换成字符串

4、将基本的数据类型转换成字符串

static String valueOf(int)

static String valueOf(double)

以此类推。。。

八、小面试题
String a=“abc”;

String b=new String(“abc”);

以上两个对象的创建有什么不同呢?

答案:第一个创建了一个对象,第二个创建了两个对象,分别是引用b和abc。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息