16.Java中的String詳解


01.String(概述)

字符串是一個特殊對象。
字符串最大特點:一旦被初始化就不可以改變。

==是比較兩個對象。而equals是比較對象引用的地址值。
String類復寫了Object類中的equals方法,該方法用於判斷字符串是否相同。
s1和s2的區別?
String s1="abc";
String s2=new String("abc");
s1有一個對象,s2有兩個對象。

02.String(常見功能-獲取和替換)

String類是用於描述字符串事物的,那么他就提供了多個方法對字符串進行操作。
常見操作:
1.獲取。
 1.1:字符串中包含的字符數,也就是字符串的長度。
 int length();獲取長度
 1.2:根據位置獲取位置上的某個字符。
 char CharAt(int index);
 1.3:根據字符獲取該字符在字符串中的位置。
 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在字符串中的位置。
注意:當訪問到字符串中不存在的角標時,會發生StringIndexOutOfBoundsException角標越界。
 int lastIndexOf(int ch);和indexOf相反,從右往左查找。
2.判斷。
 2.1:字符串中是否包含某一個字串。
 boolean contains(String str);
 特殊之處:indexOf(string str):可以索引str第一次出現位置,如果返回-1,表示str不在字符串中存在,所以也可以用於對指定判斷是否包含;所以該方法即可以判斷,又可以獲取出現位置。
 2.2:字符串中是否有內容。
 boolean isEmpty();就是判斷長度是否為0;
 2.3:字符串是否以指定內容開頭。
 boolean startsWith(String str);
 2.4:字符串是否以指定后綴結尾。
 
 2.5:判斷字符串內容是否相同,復寫了Object類中的equals()方法。
 boolean equals(String str);
 2.6:判斷內容是否相同,並忽略大小寫;
 boolean equalsIgnoreCase();

03.String(轉換)

3.1:將字符數組轉換成字符串。
構造函數:String(char());String(char[],offset,count);將字符數組中的一部分轉成字符串。char[]是字符數組,offset是開始位置,count是個數。
靜態方法:static String copyValueOf(char[] data,int offset,int count);
3.2:將字符串轉成字符數組。
char[] toCharArray();
3.3:將字節數組轉成字符串。
String(byte());String(byte[],offset,count);將字字節數組中的一部分轉成字符串。char[]是字節數組,offset是開始位置,count是個數。
3.4:將字符串轉成字節數組。
byte[] getBytes();
3.5:將基本數據類型轉成字符串。static String valueOf(int);static String valueOf(double);

特殊:字符串和字節數組在轉換過程中,是可以指定編碼表的。

04.String-切割和替換

替換:String replace(oldchar,newchar);如果要替換子字符不存在,返回的是原串。

切割:String[] split(regex);

字串:獲取字符串中的一部分。
String substring(begin);從指定位置開始到結尾。如果角標不存在,會發生角標越界異常。
String substring(begin,end);包含頭,不包含尾。

05.String-轉換-去除空格-比較

1.將字符串轉換成大寫或小寫。
String toUpperCase();String toLowerCase();
2.將字符串兩端的空格去掉;
String trim();
3.對兩個字符串進行自然順序的比較。
boolean compareTo(String);

06.String-字符串練習1

需求:
模擬一個trim方法,去除字符串兩端的空格
思路:
判斷字符串第一個位置是否是空格,如果是繼續向下判斷,知道不是空格為止。判斷結尾處空格也是如此。
當開始和結尾都判斷不是空格時,就是要獲取的字符串。

class TrimDemo
{
 //判斷字符串前空格的截止位置
 private int getStartIndex(String str)
 {
  int index=0;
  while(index<=str.length()-1&&str.charAt(index)==' ')
  {
   index++;
  }
  return index;
 }
 //判斷字符串后空格的截止位置
 private int getLastIndex(String str)
 {
  int index=str.length()-1;
  while(index>=0&&str.charAt(index)==' ')
  {
   index--;
  }
  return index;
 }
 //獲取去掉前后空格的字符串
 public String getTrim(String str)
 {
  int startIndex=getStartIndex(str);
  int lastIndex=getLastIndex(str);
  return str.substring(startIndex,lastIndex+1);
 }
}
class TrimTest
{
 public static void main(String[] args)
 {
  String str="   許前剛   ";
  System.out.println("去空格前的字符串為:");
  System.out.println(str);
  System.out.println("去空格后的字符串為:");
  System.out.println(new TrimDemo().getTrim(str));
 }
}

07.String-字符串練習2

需求:將一個字符串進行反轉。將一個字符轉指定位置進行反轉,“abcdefg”;abedcfg
思路:
曾經學習過對數組元素進行反轉
將字符串變成數組,對數組進行反轉
將翻轉后的數組變成字符串
只要將被翻轉的部分的開始和結束位置作為參數傳遞即可

 //將一個字符串指定部分進行反轉
 public static String fanZhuan(String str,int start,int end)
 {
  String str1=str.substring(start,end+1);
  char[] ch=str1.toCharArray();
  for(int i=0;i<=(ch.length-1)/2;i++)
  {
   char temp=ch[i];
   ch[i]=ch[ch.length-1-i];
   ch[ch.length-1-i]=temp;
  }
  //for(int start=0,end=ch.length;start<end;start++,end--)
  //{
  // char temp=ch[start];
  // ch[start]=ch[end];
  // ch[end]=temp;
  //}
  String str2=new String(ch);
  return str.substring(0,start)+str2+str.substring(end+1);
 }

08.String-字符串練習3

需求:
獲取一個字符串在另一個字符串中出現的次數。abkkcdkkefkkghkk
思路:
定義一個計數器
獲取kk第一次出現的位置
從第一次出現位置后剩余的字符串中繼續獲取kk出現的位置
每獲取一次計數一次
當獲取不到時,計數完成

 //獲取一個字符串在另一個字符串中出現的次數
 public static int getCount(String fatherStr,String sonStr)
 {
  int count=0;
  int index=0;
  while(true)
  {
   int y=fatherStr.indexOf(sonStr,index);
   if(y!=-1)
   {
    count++;
    index=y+1;
   }
   else
   {
    break;
   }
  }
  //while((index=fatherStr.indexOf(sonStr))!=-1)
  //{
  // fatherStr=fatherStr.substring(index+sonStr.length());
  // count++;
  //}
  return count;
 }

09.String-字符串練習4
需求:
獲取兩個字符串中最大相同字串。第一個動作:將短的那個串進行長度依次遞減的字串打印
思路:
將短的那個字串按照長度依次遞減的方式獲取到
將每獲取到的字串去長串中判斷是否包含,如果包含已經找到。
 //獲取兩個字符串中最大相同字串。
 public static String getMaxSubString(String maxStr,String minStr)
 {
  for(int x=0;x<minStr.length();x++)
  {
   for(int y=0,z=minStr.length()-x;z!=minStr.length()+1;y++,z++)
   {
    String temp=minStr.substring(y,z);
    if(maxStr.contains(temp))
    {
     return temp;
    }
   }
  }
  return "";
 }

10.11.StringBuffer-常見功能

字符串的組成原理就是通過該類實現的
StringBuffer可以對字符串內容進行增刪
StringBufffer是一個容器
很多方法與String相同
StringBuffer是可變長度的
特點:
長度是可變的
可以字節操作多個數據類型
最終會通過toString方法變成字符串

(1)存儲
StringBuffer append():將指定數據添加到已有數據的結尾處
StringBuffer insert(index,數據):可以將數據插入到指定index位置
(2)刪除
StringBuffer delete(int startint end):刪除緩沖區中的數據,包含頭,不包含尾。delete(0,sb.length());清空緩沖區
StringBuffer deleteCharAt(index):刪除指定位置的字符,就是刪一個字符。
(3)獲取
char charAt(index);根據指定位置獲取指定字符。
int indexOf(String str);
int lastIndexOf(String str);
int length();
String substring(int start,int end);
(4)修改
StringBuffer replace(start,end,String str);str是替換成的字符。這是替換一部分。
void setCharAt(index,char ch);替換指定位置的字符
(5)反轉
StringBuffer reverse();反轉

void getChars(int srcBegin, int srcEnd, char[] dst, int dstBegin):把緩沖區中的指定數據存儲到指定數組中。

12.StringBuilder

在JDK1.5版本之后出現了StringBuilder,不同之處在於:StringBuffer是線程同步的,StringBuilder是線程不同步。
建議:多線程用StringBuffer,單線程用StringBuilder
以后開發建議使用StringBuilder

java升級三因素:提高效率;簡化書寫;提高安全性。

13.基本數據類型對象包裝類

byte Byte
short short
int  Integer
long Long
boolean Boolean
float Float
double Double
char Character

基本數據類型對象包裝類的最常見作用:
就是用於基本數據類型和字符串之間相互轉換。

基本數據類型轉字符串:
基本數據類型+"";
基本數據類型.toString(基本數據類型值);如Integer.toString(34):將34轉成“34”。
字符串轉基本數據類型:
Integer.parseInt(String str);將字符串轉換成整數。
Long.parseLong(String str);將字符串轉換成長整型數。
以此類推。。。。。。
xxx a=Xxx.parseXxx(String str);必須傳入數字格式的字符串
boolean b=parseBoolean(str);

十進制轉成其他進制:
toBinaryString()
toHexString()
toOctalString()
其他進制轉成十進制:
Integer.parseInt(str,int wei):位代表str所代表的進制,轉成十進制。

Integer i=new Integer("123");
int num=i.intValue();
這個是對象調用方式。
上面的是靜態調用方式。

14.基本數據類型對象包裝類新特性

Integer x=new Integer("123");
Integer y=new Integer(123);
x==y是false
x.equals(y)是true

JDK1.5以后出現以下新特性:
Integer i=4;
自動裝箱。
還可以直接進行運算:i=i+2;
自動拆箱,變成int類型,和2進行加法運算,再將和進行拆箱賦給x。
還可以Integer i=null;
但當i=null時,進行運算會出現異常。
Integer x=128;Integer y=128;
(x==y)的值為false
Integer x=127;Integer y=127;
(x==y)的值為true
因為a和b指向了同一個Integer對象,因為當數值在byte范圍內時,對於新特性,如果該數值已經存在,則不會開辟新空間。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM