Java基礎——String類(二)

来源:http://www.cnblogs.com/1693977889zz/archive/2017/06/21/7060977.html
-Advertisement-
Play Games

今天做了幾道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;


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • ```{r} library(ggplot2) CN_DT ...
  • 題目描述 給出一個N個頂點M條邊的無向無權圖,頂點編號為1~N。問從頂點1開始,到其他每個點的最短路有幾條。 輸入輸出格式 輸入格式: 輸入第一行包含2個正整數N,M,為圖的頂點數與邊數。 接下來M行,每行兩個正整數x, y,表示有一條頂點x連向頂點y的邊,請註意可能有自環與重邊。 輸出格式: 輸出 ...
  • pip install nexmo報錯 是因為缺少 libffi-devel 需要 yum install libffi-devel 然後再執行 pip install nexmo 即可成功 ...
  • 這篇說說工廠的最後一種,還是先上 抽象工廠模式定義(來自百度百科): 抽象工廠模式是所有形態的工廠模式中最為抽象和最具一般性的一種形態。抽象工廠模式是指當有多個抽象角色時,使用的一種工廠模式。抽象工廠模式可以向客戶端提供一個介面,使客戶端在不必指定產品的具體的情況下,創建多個產品族中的產品對象。根據 ...
  • 今天,下午在和朋友聊天的時候,聊起了反射這個話題。 我們就從下麵這個段簡單的代碼開始吧。 這個代碼輸出什麼,想必大部分的讀者跟我一樣,會很快地知道答案:0 1 2 3 4 5 6 7 8 9。事實也是如此: 朋友這個時候就提出一個問題,你看在代碼裡面有一個aa();你有什麼辦法,實現這個aa函數,讓 ...
  • 題目: LeetCode: [13. Roman to Integer][1] 描述: 題意為 給定一個羅馬數字轉換為整數(1 3999)輸出。 分析: 代碼: c++ int romanToInt(string s) { int nRes = 0; int nLen = s.length(); f ...
  • 描述 題目和答案來自於 "阿裡雲大學 知乎專欄" 題目 1. 現在有如下一段代碼 將產生哪種結果: A. Compilation will fail B. Compilation will succeed and the program will print“0” C. Compilation wi ...
  • 1.collatz序列 編寫一個名為 collatz()的函數,它 有一個名為 number 的參數。如果參數是偶數, 那麼 collatz()就列印出 number // 2,並返回該值。如果 number 是奇數,collatz()就打 印並返回 3 * number + 1。 然後編寫一個程式 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...