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

来源:互联网 发布:上海潘多网络 编辑:程序博客网 时间:2024/06/04 23:34

一、边界问题(面试题)

程序一
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的小程式:

[java] view plaincopy在CODE上查看代码片派生到我的代码片
  1. public class StringBuilderDemo {  
  2.   
  3.     /** 
  4.      * @param args 
  5.      */  
  6.     public static void out(Object obj){  
  7.         System.out.println(obj);  
  8.     }  
  9.     public static void f(){  
  10.         StringBuilder sb=new StringBuilder("你好");  
  11.         sb.append(",是一个好人");  
  12.         out("追加之后的内容:"+sb);  
  13.         sb.insert(2",我叫***");  
  14.         out("插入之后的内容:"+sb);  
  15.         int cap=sb.capacity();  
  16.         out("当前容量:"+cap);  
  17.         sb.replace(1214"学生");  
  18.         out("替换后的内容是:"+sb);  
  19.         sb.setCharAt(5'马');  
  20.         sb.setCharAt(6'济');  
  21.         sb.setCharAt(7'亨');  
  22.         out("指定之后的内容:"+sb);  
  23.         sb.delete(10,12);  
  24.         out("删除之后的内容是:"+sb);  
  25.         sb.reverse();  
  26.         out("反转之后的内容:"+sb);  
  27.           
  28.     }  
  29.     public static void main(String[] args) {  
  30.         // TODO Auto-generated method stub  
  31.         f();  
  32.     }  
  33.   
  34. }  

六、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);

[java] view plaincopy在CODE上查看代码片派生到我的代码片
  1. public class StringTestDemo {  
  2.   
  3.     /** 
  4.      * @param args 
  5.      */  
  6.     public static void out(Object obj){  
  7.         System.out.println(obj);  
  8.     }  
  9.     public static void main(String[] args) {  
  10.         // TODO Auto-generated method stub  
  11.         String s1="C:\\RedHatLinux5";  
  12.         String s2="C:\\RedHatLinux";  
  13.         int num=0;  
  14.         char c=s1.charAt(num);  
  15.         out("索引"+num+"上的字符是:"+c);  
  16.         int boo=s1.compareTo(s2);  
  17.         if(boo==1)  
  18.             out("内容不相同!");  
  19.         else  
  20.             out("内容相同!");  
  21.         boolean boo1=s1.contains(s2);  
  22.         if(boo1=true)  
  23.             out("字符串"+s1+"包含字符串"+s2);  
  24.         else  
  25.             out("字符串"+s1+"不包含字符串"+s2);  
  26.         int len=s1.length();  
  27.         out("s1的长度是:"+len);  
  28.         String s11=s1.replace(s1, "c:\\Android\\KitKat");  
  29.         out("被替换后的s1是:"+s11);  
  30.         String[] arr=s11.split("\\\\");  
  31.         for(int i=0;i<arr.length;i++){  
  32.             out("第"+(i+1)+"段内容:"+arr[i]);  
  33.         }  
  34.         String lower=s1.toLowerCase();  
  35.         out("s1变成小写之后的内容是:"+lower);  
  36.     }  
  37.   
  38. }  

七、字符串与数组的转换

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

0 0
原创粉丝点击