Java基礎--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;

來源:itnose

上一篇: HashMap與Hashtable的區別

下一篇: 【17-06-19】Java進階自測:面向對象基礎知識掌握了嗎?(附答案及個人解析)

分享到: 更多
pt电子游戏官网 大小单双哪个平台最正规 2019开奖记录开奖结果 21点规则视频 二人斗地主游戏在线玩 百人牛牛技巧 输有限赢无限的投注法 时彩必中稳赚技巧 免费赛车计划软件下载 四川时时连线走势图 吉林时时票开奖号码官网 四川时时合法的吗 重庆市重庆时时开奖结果记录 北京pk10直播网站 赛车北京pk10有官网吗 球琛比分足球即时比分