一.Java字符串類基本概念
在JAVA語言中,字符串數據實際上由String類所實現的。Java字符串類分為兩類:一類是在程序中不會被改變長度的不變字符串;二類是在程序中會被改變長度的可變字符串。Java環境為了存儲和維護這兩類字符串提供了 String和StringBuffer兩個類。
?一、創建字符串
例: Stringstr=new("This is a String");
或者 Stringstr="This is a String";
?二、得到字符串對象的有關信息
1.通過調用length()方法得到String的長度.
例:
String str="Thisis a String";
int len =str.length();
2.StringBuffer類的capacity()方法與String類的 length()的方法類似,但是她測試是分配給StringBuffer的內存空間的大小,而不是當前被使用了的內存空間。
3.如果想確定字符串中指定字符或子字符串在給定字符串的位置,可以用 indexOf()和lastIndexOf()方法。
String str="Thisis a String";
Int index1 =str.indexOf("i");?? //index=2
Intindex2=str.indexOf(‘i‘,index+1);?? //index2=5
Intindex3=str.lastIndexOf("I");?? //index3=15
Intindex4=str.indexOf("String");? //index4=10
三、String對象的比較和操作
1.String對象的比較
String類的equals()方法用來確定兩個字符串是否相等。
String str="Thisis a String";
Boolean result=str.equals("This is another String");
//result=false
2.String對象的訪問
A、方法charAt()用以得到指定位置的字符。
String str="Thisis a String";
char chr=str.charAt(3); //chr="i"
B、方法getChars()用以得到字符串的一部分字符串
public voidgetChars(int srcBegin,intsrcEnd,char[]dst,intdstBegin)
String str="Thisis a String";
Char chr =new char[10];
Str.getChars(5,12,chr,0);? //chr="isa St"
C、subString()是提取字符串的另一種方法,它可以指定從何處開始提取字符串以及何處結束。
3.操作字符串
A、replace()方法可以將字符串中的一個字符替換為另一個字符。
String str="Thisis a String";
String str1=str.replace(‘T‘,‘t‘); //str1="thisis a String"
B、concat()方法可以把兩個字符串合并為一個字符串。
String str="Thisis a String";
String str1=str.concat("Test"); //str1="Thisis a String Test"
C、toUpperCase()和toLowerCase()方法分別實現字符串大小寫的轉換。
String str="THISIS A STRING";
String str1=str.toLowerCase(); //str1="thisis a string";
D、trim()方法可以將字符串中開頭和結尾處的空格去掉.
String str="Thisis a String?? ";
String str1=str.trim();?? //str1="This is a String"
E、String類提供靜態方法valueOf(),它可以將任何類型的數據對象轉換為一個字符串。如
System.out.println(String,ValueOf(math,PI));
四、修改可變字符串
StringBuffer類為可變字符串的修改提供了3種方法,在字符串中間插入和改變某個位置所在的字符。
1.在字符串后面追加:用append()方法將各種對象加入到字符串中。
2.在字符串中間插入:用insert()方法。例
StringBuffer str=new StringBuffer("Thisis a String");
Str.insert(9,"test");
System.out.println(str.toString());
這段代碼輸出為:Thisis a test String
3.改變某個位置所在的字符,用setCharAt()方法。
StringBuffer sb =new StringBuffer("aaaaaa");
sb.setCharAt(2, “b”); // 結果aabaaa
?
二.字符串分割
1.利用字符串類的split方法進行分割
??? /** *//**利用字符串的split方法進行分割
???? * @param str 待分割的字符串
???? * @param sdelimiter 分割符
???? * @return
???? */
??? public String[] splitString(String str,String sdelimiter)...{
??????? String[] array=str.split(sdelimiter);
??????? return array;
??? }
2.利用StringTokenizer來進行字符串分割
??? /** *//**利用StringTokenizer來進行字符串分割
???? * @param str? 待分割的字符串
???? * @param sdelimiter? 分割符
???? * @return
???? */
??? public String[] useStringTokenizer(String str,String sdelimiter)...{
??????? StringTokenizer token=new StringTokenizer(str,sdelimiter);
??????? String[] array=new String[token.countTokens()];
??????? int i=0;
??????? while(token.hasMoreTokens())...{
??????????? array[i]=token.nextToken();
??????????? i++;
??????? }
??????? return array;
??? }
三.字符串數組排序
/** *//**對字符串數組進行排序
???? * @param str 原始字符串數組
???? * @param flag flag=0:順序排序? flag=1:倒序排序
???? * @return 排序后的字符串數組
???? */
??? public String[] sort(String[] str,int flag)...{
??????? if(str==null||str.length==0)
??????????? throw new IllegalArgumentException();
??????? String temp=str[0];
??????? //順序排列 ,即從小到大
??????? if(flag==0)...{
??????????? for(int i=0;i<str.length-1;i++)...{
??????????????? for(int j=i+1;j<str.length;j++)...{
??????????????????? if(str[i].compareTo(str[j])>0)...{
??????????????????????? temp=str[i];
??????????????????????? str[i]=str[j];
??????????????????????? str[j]=temp;
??????????????????? }
??????????????? }
??????????? }
??????? }
??????? else if(flag==1)...{//倒序排列
??????????? for(int i=0;i<str.length-1;i++)...{
??????????????? for(int j=i+1;j<str.length;j++)...{
??????????????????? if(str[i].compareTo(str[j])<0)...{
??????????????????????? temp=str[i];
??????????????????????? str[i]=str[j];
??????????????????????? str[j]=temp;
??????????????????? }
??????????????? }
??????????? }
??????? }
??????? return str;
??? }
四.使用Hashtable對字符串進行碰撞
利用hashtable對字符串進行過濾,兩個字符數組之間的比較,對字符串數組進行過濾
1.在一些字符串數組中,常會有重復的記錄,比如手機號碼,我們可以通過Hashtable來對其進行過濾
public String[] checkArray(String[] str)...{
??????? Hashtable<String, String> hash=new Hashtable<String, String>();
??????? for(int i=0;i<str.length;i++)...{
??????????? if(!hash.containsKey(str[i]))
??????????????? hash.put(str[i], str[i]);
??????? }
??????? Enumeration enumeration=hash.keys();
??????? String[] str_new=new String[hash.size()];
??????? int i=0;
??????? while(enumeration.hasMoreElements())...{
??????????? str_new[i]=enumeration.nextElement().toString();
??????????? i++;
??????? }
??????? return str_new;
??? }
示例:
??????? String[]mobile={"13811071500","13811071500","13811071501","13811071503","13811071501"};
??????? mobile=checkArray(mobile);
??????? for(int i=0;i<mobile.length;i++)
?????????? System.out.println(mobile[i]);
?????? 輸出結果為:
??????? 13811071503
??????? 13811071501
??????? 13811071500
2.A,B均為字符串數組,找出在A中存在,而在B中不存在的字符串
??? public String[] compareArray(String[] A,String[] B){
??????? Hashtable<String, String> hash=newHashtable<String, String>();
??????? Hashtable<String, String>hash_new=new Hashtable<String, String>();
??????? for(int i=0;i<B.length;i++)
??????????? hash.put(B[i], B[i]);
??????? for(int i=0;i<A.length;i++){
?????????? if(!hash.containsKey(A[i]))
?????????????? hash_new.put(A[i], A[i]);
??????? }
??????? String[] C=new String[hash_new.size()];
??????? int i=0;
??????? Enumeration enumeration=hash_new.keys();
??????? while(enumeration.hasMoreElements()){
?????????? C[i]=enumeration.nextElement().toString();
??????????? i++;
??????? }
??????? return C;
??? }
示例:
??????? String[] mobile1={"13811071500","13811071501","13811071502","13811071503","13811071504"};
??????? String[]mobile2={"13811071500","13811071505","13811071502","13811071506","13811071504"};
??????? String[]mobile3=compareArray(mobile1,mobile2);
??????? for(int i=0;i<mobile3.length;i++)
?????????? System.out.println(mobile[i]);
輸出結果:
??? 13811071503
??? 13811071501
存在的問題:
每次都是倒序,可以再對程序稍加改動,變成正序。
3.將一個字符串數組中某一個特定的字符串過濾掉
/** *//**檢驗一個字符串數組,若包含某一特定的字符串,則將該字符串從數組中刪
除,返回剩余的字符串數組
???? * @param str_array? 字符串數組
???? * @param str_remove 待刪除的字符串
???? * @return 過濾后的字符串
???? */
??? public String[] removeStrFromArray(String[] str_array,String
str_remove)...{
??????? Hashtable<String, String> hash=new Hashtable<String, String>();
??????? for(int i=0;i<str_array.length;i++)...{
??????????? if(!str_array[i].equals(str_remove))
??????????????? hash.put(str_array[i], str_array[i]);
??????? }
??????? //生成一個新的數組
??????? String[] str_new=new String[hash.size()];
??????? int i=0;
??????? Enumeration enumeration=hash.keys();
??????? while(enumeration.hasMoreElements())...{
??????????? str_new[i]=enumeration.nextElement().toString();
??????????? i++;
??????? }
??????? return str_new;
??? }
在JAVA語言中,字符串數據實際上由String類所實現的。Java字符串類分為兩類:一類是在程序中不會被改變長度的不變字符串;二類是在程序中會被改變長度的可變字符串。Java環境為了存儲和維護這兩類字符串提供了 String和StringBuffer兩個類。
?一、創建字符串
例: Stringstr=new("This is a String");
或者 Stringstr="This is a String";
?二、得到字符串對象的有關信息
1.通過調用length()方法得到String的長度.
例:
String str="Thisis a String";
int len =str.length();
2.StringBuffer類的capacity()方法與String類的 length()的方法類似,但是她測試是分配給StringBuffer的內存空間的大小,而不是當前被使用了的內存空間。
3.如果想確定字符串中指定字符或子字符串在給定字符串的位置,可以用 indexOf()和lastIndexOf()方法。
String str="Thisis a String";
Int index1 =str.indexOf("i");?? //index=2
Intindex2=str.indexOf(‘i‘,index+1);?? //index2=5
Intindex3=str.lastIndexOf("I");?? //index3=15
Intindex4=str.indexOf("String");? //index4=10
三、String對象的比較和操作
1.String對象的比較
String類的equals()方法用來確定兩個字符串是否相等。
String str="Thisis a String";
Boolean result=str.equals("This is another String");
//result=false
2.String對象的訪問
A、方法charAt()用以得到指定位置的字符。
String str="Thisis a String";
char chr=str.charAt(3); //chr="i"
B、方法getChars()用以得到字符串的一部分字符串
public voidgetChars(int srcBegin,intsrcEnd,char[]dst,intdstBegin)
String str="Thisis a String";
Char chr =new char[10];
Str.getChars(5,12,chr,0);? //chr="isa St"
C、subString()是提取字符串的另一種方法,它可以指定從何處開始提取字符串以及何處結束。
3.操作字符串
A、replace()方法可以將字符串中的一個字符替換為另一個字符。
String str="Thisis a String";
String str1=str.replace(‘T‘,‘t‘); //str1="thisis a String"
B、concat()方法可以把兩個字符串合并為一個字符串。
String str="Thisis a String";
String str1=str.concat("Test"); //str1="Thisis a String Test"
C、toUpperCase()和toLowerCase()方法分別實現字符串大小寫的轉換。
String str="THISIS A STRING";
String str1=str.toLowerCase(); //str1="thisis a string";
D、trim()方法可以將字符串中開頭和結尾處的空格去掉.
String str="Thisis a String?? ";
String str1=str.trim();?? //str1="This is a String"
E、String類提供靜態方法valueOf(),它可以將任何類型的數據對象轉換為一個字符串。如
System.out.println(String,ValueOf(math,PI));
四、修改可變字符串
StringBuffer類為可變字符串的修改提供了3種方法,在字符串中間插入和改變某個位置所在的字符。
1.在字符串后面追加:用append()方法將各種對象加入到字符串中。
2.在字符串中間插入:用insert()方法。例
StringBuffer str=new StringBuffer("Thisis a String");
Str.insert(9,"test");
System.out.println(str.toString());
這段代碼輸出為:Thisis a test String
3.改變某個位置所在的字符,用setCharAt()方法。
StringBuffer sb =new StringBuffer("aaaaaa");
sb.setCharAt(2, “b”); // 結果aabaaa
?
二.字符串分割
1.利用字符串類的split方法進行分割
??? /** *//**利用字符串的split方法進行分割
???? * @param str 待分割的字符串
???? * @param sdelimiter 分割符
???? * @return
???? */
??? public String[] splitString(String str,String sdelimiter)...{
??????? String[] array=str.split(sdelimiter);
??????? return array;
??? }
2.利用StringTokenizer來進行字符串分割
??? /** *//**利用StringTokenizer來進行字符串分割
???? * @param str? 待分割的字符串
???? * @param sdelimiter? 分割符
???? * @return
???? */
??? public String[] useStringTokenizer(String str,String sdelimiter)...{
??????? StringTokenizer token=new StringTokenizer(str,sdelimiter);
??????? String[] array=new String[token.countTokens()];
??????? int i=0;
??????? while(token.hasMoreTokens())...{
??????????? array[i]=token.nextToken();
??????????? i++;
??????? }
??????? return array;
??? }
三.字符串數組排序
/** *//**對字符串數組進行排序
???? * @param str 原始字符串數組
???? * @param flag flag=0:順序排序? flag=1:倒序排序
???? * @return 排序后的字符串數組
???? */
??? public String[] sort(String[] str,int flag)...{
??????? if(str==null||str.length==0)
??????????? throw new IllegalArgumentException();
??????? String temp=str[0];
??????? //順序排列 ,即從小到大
??????? if(flag==0)...{
??????????? for(int i=0;i<str.length-1;i++)...{
??????????????? for(int j=i+1;j<str.length;j++)...{
??????????????????? if(str[i].compareTo(str[j])>0)...{
??????????????????????? temp=str[i];
??????????????????????? str[i]=str[j];
??????????????????????? str[j]=temp;
??????????????????? }
??????????????? }
??????????? }
??????? }
??????? else if(flag==1)...{//倒序排列
??????????? for(int i=0;i<str.length-1;i++)...{
??????????????? for(int j=i+1;j<str.length;j++)...{
??????????????????? if(str[i].compareTo(str[j])<0)...{
??????????????????????? temp=str[i];
??????????????????????? str[i]=str[j];
??????????????????????? str[j]=temp;
??????????????????? }
??????????????? }
??????????? }
??????? }
??????? return str;
??? }
四.使用Hashtable對字符串進行碰撞
利用hashtable對字符串進行過濾,兩個字符數組之間的比較,對字符串數組進行過濾
1.在一些字符串數組中,常會有重復的記錄,比如手機號碼,我們可以通過Hashtable來對其進行過濾
public String[] checkArray(String[] str)...{
??????? Hashtable<String, String> hash=new Hashtable<String, String>();
??????? for(int i=0;i<str.length;i++)...{
??????????? if(!hash.containsKey(str[i]))
??????????????? hash.put(str[i], str[i]);
??????? }
??????? Enumeration enumeration=hash.keys();
??????? String[] str_new=new String[hash.size()];
??????? int i=0;
??????? while(enumeration.hasMoreElements())...{
??????????? str_new[i]=enumeration.nextElement().toString();
??????????? i++;
??????? }
??????? return str_new;
??? }
示例:
??????? String[]mobile={"13811071500","13811071500","13811071501","13811071503","13811071501"};
??????? mobile=checkArray(mobile);
??????? for(int i=0;i<mobile.length;i++)
?????????? System.out.println(mobile[i]);
?????? 輸出結果為:
??????? 13811071503
??????? 13811071501
??????? 13811071500
2.A,B均為字符串數組,找出在A中存在,而在B中不存在的字符串
??? public String[] compareArray(String[] A,String[] B){
??????? Hashtable<String, String> hash=newHashtable<String, String>();
??????? Hashtable<String, String>hash_new=new Hashtable<String, String>();
??????? for(int i=0;i<B.length;i++)
??????????? hash.put(B[i], B[i]);
??????? for(int i=0;i<A.length;i++){
?????????? if(!hash.containsKey(A[i]))
?????????????? hash_new.put(A[i], A[i]);
??????? }
??????? String[] C=new String[hash_new.size()];
??????? int i=0;
??????? Enumeration enumeration=hash_new.keys();
??????? while(enumeration.hasMoreElements()){
?????????? C[i]=enumeration.nextElement().toString();
??????????? i++;
??????? }
??????? return C;
??? }
示例:
??????? String[] mobile1={"13811071500","13811071501","13811071502","13811071503","13811071504"};
??????? String[]mobile2={"13811071500","13811071505","13811071502","13811071506","13811071504"};
??????? String[]mobile3=compareArray(mobile1,mobile2);
??????? for(int i=0;i<mobile3.length;i++)
?????????? System.out.println(mobile[i]);
輸出結果:
??? 13811071503
??? 13811071501
存在的問題:
每次都是倒序,可以再對程序稍加改動,變成正序。
3.將一個字符串數組中某一個特定的字符串過濾掉
/** *//**檢驗一個字符串數組,若包含某一特定的字符串,則將該字符串從數組中刪
除,返回剩余的字符串數組
???? * @param str_array? 字符串數組
???? * @param str_remove 待刪除的字符串
???? * @return 過濾后的字符串
???? */
??? public String[] removeStrFromArray(String[] str_array,String
str_remove)...{
??????? Hashtable<String, String> hash=new Hashtable<String, String>();
??????? for(int i=0;i<str_array.length;i++)...{
??????????? if(!str_array[i].equals(str_remove))
??????????????? hash.put(str_array[i], str_array[i]);
??????? }
??????? //生成一個新的數組
??????? String[] str_new=new String[hash.size()];
??????? int i=0;
??????? Enumeration enumeration=hash.keys();
??????? while(enumeration.hasMoreElements())...{
??????????? str_new[i]=enumeration.nextElement().toString();
??????????? i++;
??????? }
??????? return str_new;
??? }