-------android培训、java培训、期待与您交流! ----------
一 String类的概述:
(一)String
类代表字符串。Java 程序中的所有字符串字面值(如 "abc"
)都作为此类的实例实现。
(二) 字符串是常量;它们的值在创建之后不能更改。字符串缓冲区支持可变的字符串。因为 String 对象是不可变的,所以可以共享。 例如:String str = "abc";
(三) String 类包括的方法可用于检查序列的单个字符、比较字符串、搜索字符串、提取子字符串、创建字符串副本并将所有字符全部转换为大写或小写。
(四)Java 语言提供对字符串串联符号("+")以及将其他对象转换为字符串的特殊支持。字符串串联是通过 StringBuilder
(或StringBuffer
)类及其
append
方法实现的。字符串转换是通过 toString
方法实现的,该方法由Object 类定义,并可被 Java 中的所有类继承。
二:String类方法的使用;
(一)String s1="abc"; String s2=new String("abc"); String s3="abc"; s1==s2返回的是false ;s1.equals(s2) 返回的是true; s1==s3返回的是true;
为什么s1==s2 是false;而s1==s3是true呢?原因是:当s1在内存中new了一个对象,s3在去new对象时就像在内存中看有没有和自己一样的值如果有就
与相同的值公用一个对象,这样是为了节省空间;
(1) String类复写了Object类中的equals方法;所以该方法用于判断字符串是否相同;
(2)s1与s2有什么区别:s1在内存中有一个对象; s2在内存中有两个对象,为什么有两个对象呢?因为s2是一个对象了,在new一个("abc")就两个了;
(二)常见的操作方法有哪些:
(1)获取:
1.1 字符串中的包含的字符串长度:int length();
1.2 根据位置获取位置上的某个字符:char charAt( int index); //如果输入的值大于字符串就会出现:StringIndexOutOfBoundsException数组越
界异常;
1.3 根据字符获取该字符在字符串中的位置:
int indexof( int ch ); 返回的是ch在字符串中第一次出现的位置; 如果没有找到该下标的字符就会返回:-1;
int indexof(int ch,int formIndex) :从formIndex指定位置开始,获取ch在字符串中的位置;
int indexof( String str ); 返回的是str 在字符串中第一次出现的位置; 如果没有找到该下标的字符就会返回:-1;
int indexof(iString str ,int formIndex) :从formIndex指定位置开始,获取str 在字符串中的位置;
int lastIndexof(int ch):返回ch最后一次出现的位置
如示例:
public static void main(String[] args) {
// TODO Auto-generated method stub
String str=" sfd f ";
System.out.println("<"+str+">");
//System.out.println("<"+str.trim()+">");//使用去除空格的方法或取字符串
String str1=show(str);
System.out.println("<"+str1+">");
}
public static String show(String name){
//从角标0开始判断是否是空格并加加
int index=0; int end=name.length()-1;
//通过charAt()方法获取字符串
while(index<end && name.charAt(index)==' '){
//使用判断得到字符串前面的空格数
index++;
}
//从角标字符串长度开始判断是否是空格并--
while(index<=end &&name.charAt(end)==' '){
//使用判断得到字符串后面的空格数
end--;
}
//通过substring获取字符串;
return name.substring(index, end+1);
}
}
(2)判断:
2.1 字符串中是否包含某一个字符串:boolean contins (str);
2.2 字符串中是否有内容:public boolean isEmpty() 当且仅当 length()
为0 时返回 true。
2.3字符串是否是以指定的内容开头:public boolean startsWith(String prefix)
如果参数表示的字符序列是此字符串表示的字符序列的前缀,则返回 true
;否则返回 false
。还要注意,如果参数是空字符串,或者等于
此 String
对象(用 equals(Object)
方法确定),则返回 true
。
2.4字符串是否是以指定的内容结尾:public boolean endsWith(String suffix)
如果参数表示的字符序列是此对象表示的字符序列的后缀,则返回 true
;否则返回 false
。注意,如果参数是空字符串,
或者等于此 String
对象(用 equals(Object)
方法确定),则结果为 true
。
2.5 判断字符串的内容是否相同,复写了Object类中的equals方法:boolean equals(str);
2.6 判断内容是否相同,并忽略大小写:boolean equalsIgnoreCase(str);
如示例:
public class 获取一个字符串出现的位置 {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
String str="sdfkkfdsfssdekkksdfedsakkkdsfdsf";
int i=show(str,"kk");
System.out.println(i);
}
public static int show(String name,String key){
if(name=="" || name==null ){
return -1;
}
int count=0; //记录字符出现的次数
int index=0;//记录字符出现的位置
//获取要查找字符(key)的位置,不等于负一就在找;
while((index=name.indexOf(key, index))!=-1){
//使用substring获取新的字符串在使用新的字符串进行再次获取
index=(index+key.length());
//name=name.substring();
count++;
}
return count;
}
}
(3) 转换:
3.1 将字符数组转成字节数组:
构造函数:String(char[]); char[] c={'a','d','e','r','i'}; String s=new String(c); System.out.println(s); 结果为:aderi
String (char[] ,offset, count ):将字符数组中的某一部分转换成字符串:
char[] c={'a','d','e','r','i'}; String s=new String(c,2,3); System.out.println(s); 结果为:eri
静态方法: static String copyValueof ( char[ ] );
copyValueOf ( char[ ] data ,int offset ,int count );
如示例:
public static String copyValueOf(char[] ch){
String s=new String(ch);
return s;
}
3.2将字符串转换成字符数组 : char[ ] toCharArray();
3.3 将字节数组转换成字符串 : String(byte [ ] );
String (byte[ ] ,offset, count ):将字符数组中的某一部分转换成字符串:
3.4 将字符串转换字节数组: byte [ ] getBytes();
3.5 将基本数据类型转换成字符串: static String valueOf( int ); static String valueOf( double ); 或是 int值+" ";就如同String valueOf (int 值);
特殊:字符串和字节数组在转换过程中是可以指定编码表的;
(4)替换:
String replace(oldchar , newchar); String s="hello java"; String s1=s.replace("java", "world");
(5)切割: split("要以什么字符来切割"); String s=" sdf ,sdff,sdfdf,dsfdf"; String[] str=s.split(",");就是以( , )来切割并存到字符数组中;
(6)子串:获取字符串中的一部份
String substring(begin);
String substring(begin,end);
(7)转换,去除空格,比较
7.1 将字符串转换成大写或小写:
String toUpperCase(); 大写
String toLowerCase();小写
7.2 将字符串两端的多个空格去除: String trim();
7.3 对两个字符串进行自然顺序的比较: int compareTo(String);
练习:1
public class 获取两个字符串中的最大相同子串 {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
String s1="abcwerthelloyuiodef";
String s2="cvhellobnm";
String name=show(s1,s2);
System.out.println(name);
}
public static String show(String s1,String s2){
//定义两个变量来获取最大长度的字符串小的字符串
String max="",min="";
//使用运算符来判断:s1大于s2吗大于就把s1的值赋给max否则就是s2
max=(s1.length()>s2.length())?s1:s2;
//使用运算符来判断:max等于s1吗等于于就把s2的值赋给min否则就是s1
min=max==s1?s2:s1;
//外出循环控制循环次数
for (int i = 0; i < min.length(); i++) {
//将字符串从两边进行比较由此依次递减
for (int j = 0,z=min.length()-i;z!=min.length()+1; j++,z++) {
//使用substring方法进行截取
String temp=min.substring(j,z);
if(max.contains(temp)){
return temp;
}
}
}
return "";
}
}
练习2:
public class 将字符串反转 {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
String str="sdfsdff fdffdf";
String ch=show(str,3,7);//按指定的位置反转字符串
System.out.println(ch);
}
public static String show(String name,int i,int x){
char[] ch=name.toCharArray();//字符串转换成数组
reverse(ch,i,x);//调用方法反转数组
return new String(ch);//返回字符串
}
//定义反转的方法并传入要反转的数组
private static void reverse(char[] ch,int j,int x) {
//重0开始到字符串长度减一结束;i++后的值不能大于字符串长度
//i++是将不同的字符进行替换,end减减是比较一次就减少一次
for(int i=j,end=x-1;i<end;i++,end--){
swap(ch,i,end);
}
}
//定义一个方法利用第三方变量来交换位置:
private static void swap(char[] ch, int i, int end) {
char temp=ch[i];
ch[i]=ch[end];
ch[end]=temp;
}
}
三:StringBuffer的使用:
StringBuffer概述:StringBuffer是字符串缓冲区;线程安全的可变字符序列。一个类似于 String
的字符串缓冲区,但不能修改。
StringBuffer是一个容器且有以下特点:
1: :长度是可变化的; 2:可以以字节操作多个数据类型: 3:最终会通过toString()方法变成字符串;
(一)存储:
(1): StringBuffer :append()方法是指定数据作为参数添加到已有的数据结尾处;
(2) StringBuffer :insert(index , 数据):可以将数据插入到指定index位置上;如果index角标不在就会出现角标越界的异常:
(二)删除:
StringBuffer delete(start ,end):删除缓冲区中的数据,包含start ,不包含end;
StringBuffer deleteCharAt(index):删除指定位置的单个字符。
(三)获取:
char charAt(int index); int length(); String subString(int Start ,int end )
int indexOf(String str);
(四)修改:
StringBuffer sb=new StringBuffer();
sb.replace(start ,end , String );从start开始到end结束不包含end角标:String要替换的字符串;
sb.setCharAt(int index , char ch):替换指定索引的单个字符;
(五) 反转: StringBuffer reverse();
(六)JDK1.5版本子后出现了StringBuider:
StringBuffer是线程安全的:
StringBuider是线程不安全的:
四:基本数据类型对象包装类:就是将基本数据类型转换才类
byte --- Byte ;short ----Short ; int ----Integer ; long ---- Long ; boolean ----Boolean ; float ----Float ;double ----Double ;char ----Character
基本数据类型对象包装类的最常见作用:就是用于基本数据类型和字符串类型之间的左转换;
基本数据类型转换成字符串: 基本数据类型+""; 或是基本数据类型.toString (基本数据类型值);
例如:Integer.toString(34);这将会把34转换成字符串"34";
字符串转换成基本数据类型:
例如: 基本数据类型 类型名=对应的包装类类型.parse数据类型(String);
int num=Integer.parseInt("123");
double b=Double.parseDouble("123.12");
boolean bl=Boolean.parseBoolean("true");
数据类型的自动拆装箱:
Integer x=8; //自动装箱 --就如new Integer(8);
x=x+5; //自动进行拆箱,变成了int类型,和5进行加法运算; 在将和进行装箱赋给x;就如: x=x.intValue()+5;
-------android培训、java培训、期待与您交流! ----------