今天做了幾道String常見操作。先來幾個代碼實例: 例一:此方法,僅把字元串前後出現的空格去掉了,中間部分不會。 例二: 例三: 例四: 例五&例六: 在例五和例六中,可以從列印方式去思考,為什麼例六要不例五速度快那麼多。 例五的執行方式就好比: 例六的執行方式就不一樣了: 它是執行一次之後,下一 ...
今天做了幾道String常見操作。先來幾個代碼實例:
例一:此方法,僅把字元串前後出現的空格去掉了,中間部分不會。
1 class TestTrim { 2 public static void main(String[] args) { 3 String str = " 這是一 個要 去 兩端 空格 的字元串 "; 4 5 str = trim(str); 6 System.out.println("去完空格以後:" + str); 7 } 8 9 static String trim(String str) { 10 11 int beginIndex = 0; 12 int endIndex = str.length() - 1; 13 14 while (beginIndex <= endIndex) { 15 // 從前往後算空格 16 if (str.charAt(beginIndex) == ' ') { 17 beginIndex++; 18 } else { 19 break; 20 } 21 } 22 23 while (beginIndex <= endIndex) { 24 // 從後往前算空格 25 if (str.charAt(endIndex) == ' ') { 26 endIndex--; 27 } else { 28 break; 29 } 30 } 31 32 str = str.substring(beginIndex, endIndex + 1); 33 return str; 34 } 35 }
例二:
1 //字元串翻轉 2 public class TestTrim2 { 3 public static void main(String[] args) { 4 String str = "請 把我 翻轉 過來 "; 5 6 char[] list = str.toCharArray(); 7 8 for (int i = 0; i < list.length / 2; i++) { 9 char temp = ' '; 10 11 temp = list[i]; 12 list[i] = list[list.length - 1 - i]; 13 list[list.length - 1 - i] = temp; 14 } 15 str = new String(list); 16 System.out.println(str); 17 } 18 }
例三:
1 //String 常見操作——獲取 2 public class TestTrim3 { 3 public static void main(String[] args) { 4 String[] fileList = { "我是中國人", "我熱愛我的祖國", "我在自學編程", "我將文件存為.java的形式了", 5 "我喜歡.java", "java讀起來就很好聽", "你喜歡java嗎?", "和我一起學習.java", 6 "我通常將文件保存在E盤", "文件的名稱為XXXX.java", "位元組碼文件為XXX.class" }; 7 8 for (int i = 0; i < fileList.length; i++) { 9 if (fileList[i].startsWith("我") && fileList[i].endsWith(".java") 10 && fileList[i].contains("中國")) 11 ; 12 System.out.println("發現:" + fileList[i]); 13 } 14 } 15 16 }
例四:
1 public class TestTrim4 { 2 public static void main(String[] args) { 3 StringBuffer buff = new StringBuffer(); 4 buff.append("第一句話"); 5 6 StringBuffer buff2 = buff; 7 buff2.append("這是第二句話"); 8 9 System.out.println(buff); 10 System.out.println(buff2); 11 } 12 }
例五&例六:
1 //探討StringBuffer的效率問題 2 public class TestTrim5 { 3 public static void main(String[] args) { 4 // 設置一個得到當前時間,來進行效率測試,以毫秒為單位。 5 long begin = System.currentTimeMillis(); 6 7 String str = "";//下麵沒有列印,有個小小的報錯,但不影響的 8 for (int i = 0; i < 50000; i++) { 9 str += i; 10 } 11 long end = System.currentTimeMillis(); 12 13 System.out.println("程式運行了" + (end - begin) + "毫秒"); 14 //System.out.println(str);為了測試,這個地方就不列印了,等全部列印出來就太慢了 15 } 16 }
1 //用StringBuffer測試效率 2 public class TestTrim6 { 3 public static void main(String[] args) { 4 5 long begin = System.currentTimeMillis(); 6 7 StringBuffer buff = new StringBuffer(); 8 for (int i = 0; i < 50000; i++) { 9 buff.append(i); 10 } 11 12 long end = System.currentTimeMillis(); 13 14 System.out.println("程式一共執行了" + (end - begin) + "毫秒"); 15 } 16 }
在例五和例六中,可以從列印方式去思考,為什麼例六要不例五速度快那麼多。
例五的執行方式就好比:
1 12 123 1234 12345 123456 1234567 12345678 .........
..........
...........
例六的執行方式就不一樣了:
它是執行一次之後,下一次會再上一次保留的狀態下繼續往上堆。
1,2,3,4,5,6,7,8,9........(中間沒有逗號哈,就是不停的往上加,直到迴圈結束。)
String轉換類操作
==字元數組轉成字元串
--String(char[]) 構造函數
--String(char[] value, int offset, int count)
char [] data={'a','b','c'};
String str=new String (data);
== String類的靜態方法
--static String copyValueOf(char[] data)
--static String copyValueOf(char[] data, int offset, int count)
char[] cArray=new char[]{'廣','闊','天','地'};
String str=String.copyValueOf(cArray,2,2); //從第過引為2的開始,拷貝2個
--static String valueOf(char[]); // 返回 char 數組參數的字元串表示形式。
char[] c=new char[]{'a','b','c','d'};
String str=String.valueOf(c); // abcd
== 將字元串,轉換成數組(字元數組,位元組數組)
char [] array=str.toCharArray();
byte[] b=str.getBytes()//註意,這個有點不太一樣,照API講
==將基本數據類型轉換成字元串
String.valueOf(89); = 89+"" //Api中,共重載了9種
切割替換類操作
-- String replace(CharSequence target, CharSequence replacement) //
String str="中國人民,人民,人民";
str=str.replace("人民", "百姓");
如何把字元串中的所有的空格去掉 str=str.replace(" ","");
-- String[] split
String str="中國,美國,法國,小日本";
String [] list= str.split(",");
String str="中國|美國|法國|小日本";
String [] list=str.split("\\|"); //註意,要對|進行轉義 (.也要轉義)
-- String substring(int beginIndex)
String str="abcdefg";
str= str.substring(2); //從索引為2的位置(含) 開始截取
System.out.println(str); //cdefg
-- String substring(int beginIndex, int endIndex) beginIndex - 起始索引(包括) endIndex - 結束索引(不包括)。 顧頭不顧尾
-- String toUpperCase(); //轉換大小寫
-- String toLowerCase();
-- String trim(); //去空格(去兩端空格)
StringBuffer 的其他操作
刪除
StringBuffer delete(int start, int end) //清空緩衝區 buff.delete(0,buff.length())
StringBuffer deleteCharAt(int index)
獲取
char charAt(int index)
int indexOf(String str)
int lastIndexOf(String str)
String subString(int index,int end)
從哪索引開始 到哪個索引 從數組的哪開始存
void getChars(int srcBegin, int srcEnd, char[] dst, int dstBegin); 將緩衝區的數據存到指定的字元數組裡 //buff.getChars(2, 3, c, 3);
修改
StringBuffer replace(start,end,String)
void setCharAt(int index,char ch);
StringBuffer reverse();
//例子:
StringBuffer buff=new StringBuffer(str);
buff.reverse();
==== StringBuilder jdk1.5 以後出現的,它的功能和 StringBuffer相同
StringBuffer 是線程安全的,沒有StringBuilder速度快
StringBuilder 是線程不安全的,速度快
包裝類
基本數據類型的包裝類
8種基本數據類型 (原生類)
byte Byte
short Short
int Integer
long Long
char Character
boolean Boolean
float Float
double Double
主要用於基本數據類型和字元串之間進行轉換等操作
//求int型的最大數**
System.out.println(Integer.MAX_VALUE);
//把一個字元轉大寫
char x='a';
System.out.println(Character.toUpperCase(x)); //A
//例子,將 數字轉成字元串
90 +"" ;
Integer.toString(90);
//例子,將字元串轉成基本數據類型
計算 "44" + "55" =99
int result= Integer.parseInt("44")+Integer.parseInt("55"); //parseInt是靜態方法
int a =new Integer("22").intValue(); //也可以
附:如果要轉的字元串不符數字規則,則拋出 NumberFormatException
// 進位轉換
System.out.println(Integer.toBinaryString(x)); //0b1011010
System.out.println(Integer.toHexString(x)); //0x5a
System.out.println(Integer.toOctalString(x)); //0123
關於拆箱和裝箱
裝箱:把基本數據類型,轉成對象類型
拆箱:把對象類型,轉成基本數類型
Integer x=new Integer("100"); //可以
Integer y=new Integer(100); //可以
System.out.println(x==y); //false
System.out.println(x.equals(y)); //true
從 jdk1.5 以後
Integer x=5; //可以,自動裝箱 (基本數據類型,轉成對象類型,叫裝箱)
x=x+2; //可以,自動拆箱,做完加法以後,又自動 裝箱
Integer x=null; //可以
Integer a=100;
Integer b=100;
System.out.println(a==b); true 但當 值大於128時,它為false
BigDecimal類的應用
BigDecimal a=new BigDecimal("89149801457809234985932404572309");
BigDecimal b=new BigDecimal("89140345823459735");
System.out.println( a.multiply(b));
它是java.math包下的
Bigdecimal 的構造函數
BigDecimal(int) 創建一個具有參數所指定整數值的對象。
BigDecimal(double) 創建一個具有參數所指定雙精度值的對象。
BigDecimal(long) 創建一個具有參數所指定長整數值的對象。
BigDecimal(String) 創建一個具有參數所指定以字元串表示的數值的對象。
常用方法
add(BigDecimal) BigDecimal對象中的值相加,然後返回這個對象。
subtract(BigDecimal) BigDecimal對象中的值相減,然後返回這個對象。
multiply(BigDecimal) BigDecimal對象中的值相乘,然後返回這個對象。
divide(BigDecimal) BigDecimal對象中的值相除,然後返回這個對象。
toString() 將BigDecimal對象的數值轉換成字元串。
doubleValue() 將BigDecimal對象中的值以雙精度數返回。
floatValue() 將BigDecimal對象中的值以單精度數返回。
longValue() 將BigDecimal對象中的值以長整數返回。
intValue() 將BigDecimal對象中的值以整數返回。 咒
格式化及例子
由於NumberFormat類的format()方法可以使用BigDecimal對象作為其參數,
可以利用BigDecimal對超出16位有效數字的貨幣值,百分值,以及一般數值進行格式化控制。
以利用BigDecimal對貨幣和百分比格式化為例。
-- 首先,創建BigDecimal對象,進行BigDecimal的算術運算後,分別建立對貨幣和百分比格式化的引用,
-- 最後利用BigDecimal對象作為format()方法的參數,輸出其格式化的貨幣值和百分比
符串工具類
import java.io.UnsupportedEncodingException;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.math.BigDecimal;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.*;
import java.util.regex.Matcher;
import java.util.regex.Pattern;