[Java]字串String

String是一個比較特別的資料型態,它是一個物件類別( Object ),基本型態所對應的物件類別,可直接給於相同類型的值,而不需使用new來產生物件,而String資料型態跟基本型態一樣可以直接給於值,不過String沒有相對應的基本型態。

String在使用上十分普遍,大部份的資料型能都可以變成String存放。String本身是字串是使用utf8格式存放的,所以在計算字元時,一個中文字跟一個英文字都是算1,這點是跟其它程式語言不太一樣的。

基本型能及其對應物件名稱

String的宣告及初始化

“ ”雙引號內資料則為String資料型能

            //直接給值
            String a = "123";
            System.out.println("a:"+a);
            
            //new 一個String物件
            String b = new String("456");
            System.out.println("b:"+b);
            
            //先宣告再給值
            String c ;
            c = "789";
            System.out.println("c:"+c);
            
            //先宣告再new一個物件
            String d;
            d = new String("321");
            System.out.println("d:"+d);

字串的連結合併

字串的連結合併是利用 + 來使二個字串變成一個字串

            String z = a + b;//二字串變數相加,連結
            System.out.println("二字串變數相加:"+z);
            
            String y = "789"+"123";//二字串相加,連結
            System.out.println("二字串相加:"+y);
            
            String x = 456+"123" ;//數字加字串,連結
            System.out.println("數字加字串:"+x);

以下為上面二範例的結果

StringExpAns1.png

String.valueOf 基本型態轉換成字串

利用靜態函數String.valueOf(型態)可以把型能轉變成字串

        int num = 123;
        String Snum = String.valueOf(num);
        System.out.println("數字變字串:"+Snum);
        //數字變字串:123
        
        double numf = 123.1;    
        String Snumf = String.valueOf(numf);
        System.out.println("浮點變字串:"+Snumf);
        //浮點變字串:123.1

基本型態物件.parse基本型態  字串轉換成基本型態

利用基本型態物件的函數parse,可以把字轉換成基本型態,如果無法轉換時會有Exception產生

        String Sint = "123";
        int myint = Integer.parseInt(Sint);
        System.out.println("字串轉換成數字:"+myint);
        //字串轉換成數字:123
        
        String SFloat = "123.1";
        float myfloat= Float.parseFloat(SFloat);
        System.out.println("字串轉換成浮點數:"+myfloat);
        //字串轉換成浮點數:123.1
        
        String SDouble = "123.2";
        double mydouble= Double.parseDouble(SDouble);
        System.out.println("字串轉換成雙浮點數:"+mydouble);
        //字串轉換成雙浮點數:123.2
        
        //其它型態以此類推...

IndexOf 查詢字元位存在於字串內位置,以0為起始

IndexOf(字串),有找到字串時會回傳第一個字元的位置,IndexOf如查詢不到,則會回傳-1

字串內的內容存放可視為一連續空間,而每一個字元均存放在順序的位置上,如下表所示:

String2.png
        String smart = "Smart";
        int idx = smart.indexOf("m");
        System.out.println("m所在位置:"+idx);
        //m所在位置:1
        
        idx = smart.indexOf("rt");
        System.out.println("rt所在位置:"+idx);
        //rt所在位置:3
        
        idx = smart.indexOf("z");
        System.out.println("z所在位置:"+idx);
        //z所在位置:-1
        
        //中文部份
        String chinese = "中華民國";
        int cidx = chinese.indexOf("民");
        System.out.println("民所在位置:"+cidx);
        //民所在位置:2
        
        cidx = chinese.indexOf("中華");
        System.out.println("中華所在位置:"+cidx);
        //中華所在位置:0
        
        cidx = chinese.indexOf("台灣");
        System.out.println("台灣所在位置:"+cidx);
        //台灣所在位置:-1

replaceAll、replaceFirst字串取代

replaceAll (要被取代的字串,要取代的字串)   取代全部找到的”要被取代字串”

replaceFirst (要被取代的字串,要取代的字串)  取代第一個找到的”要被取代字串”

其中replaceAll函數可以使用正規表示式來做整批有規則性的取代

        String replaceString = "blog.yslifes.com,blog.yslifes.com";
        String replaced = replaceString.replaceAll("blog", "www");
        System.out.println("All取代後的字串:"+replaced);
        //All取代後的字串:www.yslifes.com,www.yslifes.com
        
        replaced = replaceString.replaceFirst("blog", "www");
        System.out.println("First取代後的字串:"+replaced);
        //First取代後的字串:www.yslifes.com,blog.yslifes.com

String.format字串格式化

String.format是一個靜態函數,可以直接使用,將字串依設定的位置或格式回傳出來。

如需顯示三位數的字串數字,前方補零,則可利用以下方法:

        String formatStr = "%03d";
        String formatAns = String.format(formatStr, 12);
        System.out.println("數字補零:"+formatAns);
        //數字補零:012

相關設定方法

CharAt取得指定字元

CharAt(位置)可取出指定位置的字元,中文算法與英文相同

        String charStr = "This is my Web site! blog.yslifes.com";
        char c = charStr.charAt(3);
        System.out.println("英文第4位的字元是:"+c);
        //英文第4位的字元是:s
        
        charStr = "這是我的網站! blog.yslifes.com";
        c = charStr.charAt(5);
        System.out.println("中文第5位的字元是:"+c);
        //中文第5位的字元是:站

equals 二字串是否相等

equals可以比較二個字串或物件是否相同,以為Object原型就有的方法,字串要全數相同回傳值才會為true

        String aStr = "String A";
        
        String bStr = "String B";
        boolean Equal = aStr.equals(bStr);
        System.out.println("a與b是否相同:"+Equal);
        //a與b是否相同:false
        
        String cStr = "String A";
        Equal = aStr.equals(cStr);
        System.out.println("a與c是否相同:"+Equal);
        //a與c是否相同:true
        
        String dStr = "String A ";
        Equal = aStr.equals(dStr);
        System.out.println("a與d是否相同:"+Equal);
        //a與d是否相同:false

split字串切割

split(指定符號) ,可依指定符號把字串分開成陣列

        String splitStr = "blog,yslifes,com";
        String[] array = splitStr.split(",");
        for(int i = 0 ; i < array.length ; i ++)
            System.out.println("第"+i+"個:"+array[i]);
        /*
        第0個:blog
        第1個:yslifes
        第2個:com
         */

substring取得指定字串範圍

substring(起始值 , 終始值),可以取出起始位置,到終止位置的字串,其中包含起始值,不包含終始值

        String subStr = "blog.yslifes.com";
        String sub1 = subStr.substring(1, 4);
        System.out.println("第1到4的字串內容為:"+sub1);
        //第1到4的字串內容為:log

trim去空白

trim()可以去除左邊及右邊二則空白,不過在字串間空白並不會處理

        String HasEmptyStr = " ABC";
        System.out.println("1空白去除:"+HasEmptyStr.trim());
        //1空白去除:ABC
        
        HasEmptyStr = "ABC ";
        System.out.println("2空白去除:"+HasEmptyStr.trim());
        //2空白去除:ABC
        HasEmptyStr = " ABC ";
        System.out.println("3空白去除:"+HasEmptyStr.trim());
        //3空白去除:ABC
        
        HasEmptyStr = "ABC DEF";
        System.out.println("4空白去除:"+HasEmptyStr.trim());
        //4空白去除:ABC DEF

字串長度

length()可以取回字串的長度

        String strLength = "長度是多少呢?";
        System.out.println("字串長度:"+strLength.length());
        //字串長度:7

3 thoughts to “[Java]字串String”

  1. 大大你好 我想請問一下如果想要自學JAVA的話要從哪邊著手呢?
    本人之前只學過VB

    1. 您已經有寫程式的經驗了,所以您可以看看Java的變數、function、陣列等的作法
      再來看您有什麼程式的需求,邊做邊學會比較好,像一些OO等觀念可以寫久了慢慢再培養

  2. 大大請問一下我想要用java 接 一個BSTR 於是我用jniwrapper的BStr
    來接,他叫我自定一個類別,那我又要如何撰寫?????
    很疑惑?請大大指點迷津!!!

發表迴響