大數據——Java實用類(二)

2020-08-08 20:00:33

String類的常用方法

String類概述

在Java中,字串被作爲String型別的物件來處理。String類位於java.lang包中,預設情況下,該包被自動匯入所有的程式。建立String物件的方法如以下程式碼所示:
String s=「Hello World」;
或者
String s=new String(「Hello World」);
String類提供了許多有用的方法。例如,獲得字串的長度、對兩個字串進行比較、連線兩個字串以及提取一個字串中的某一個部分等。可以使用String類提供的方法來完成對字串的操作。

String類常用方法

(1)求字串長度length()
呼叫length()方法的語法格式如下:
字串.length()
length()方法返回字串的長度。
範例一:註冊新使用者,要求密碼長度不能小於6位。
程式碼展示:

import java.util.Scanner;
public class Register {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String uname,pwd;
        System.out.print("請輸入使用者名稱:");
        uname = sc.next();
        System.out.print("請輸入密碼:");
        pwd = sc.next();
        if (pwd.length() >= 6) {
            System.out.println("註冊成功!");
        } else {
            System.out.println("密碼長度不能小於6位!");
        }
    }
}

輸出結果:在这里插入图片描述
(2)字串比較
字串比較的語法格式如下:
字串1.equals(字串2);
比較兩個字串的值是否相同,返回值爲boolean型別,如果相同,則返回真值,否則返回假值。
範例二:註冊成功後,實現登錄驗證。使用者名稱爲「TOM」,密碼爲「1234567」。
分析如下:在使用equals()方法比較兩個字串時,它逐個字元比較組成兩個字串的每個字元是否相同。如果都相同,則返回真值,否則返回假值。對於字元的大小寫,也在檢查範圍之內。
程式碼展示:

import java.util.Scanner;
public class Register {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String uname,pwd;
        System.out.print("請輸入使用者名稱:");
        uname = sc.next();
        System.out.print("請輸入密碼:");
        pwd = sc.next();
        if (uname.equals("TOM") && pwd.equals("1234567")) {
            System.out.println("登錄成功!");
        } else {
            System.out.println("使用者名稱或密碼錯誤,登錄失敗!");
        }
    }
}

輸出結果:在这里插入图片描述
範例三:實現會員註冊,要求使用者名稱長度不小於3,密碼長度不小於6,註冊時兩次輸入密碼必須相同 。
程式碼展示:

import java.util.Scanner;
public class ZhuCE {
    public static void main(String[] args) {
        String name;
        String mima1;
        String miam2;
        boolean flag=false;
do {
            System.out.println("***歡迎進入註冊系統***");
            Scanner sc = new Scanner(System.in);
            System.out.print("請輸入使用者名稱:");
            name = sc.next();
            System.out.print("請輸入密碼:");
            mima1 = sc.next();
            System.out.print("請再次輸入密碼");
            miam2 = sc.next();
    if (name.length() < 3 || mima1.length() < 6 || miam2.length() < 6) {
        System.out.println("使用者名稱長度小於3,密碼長度不能小於6!");
        flag = false;
    } else if (!mima1.equals(miam2)) {
        System.out.println("兩次密碼輸入不相同!");
        flag = false;
    } else {
        flag = true;
    }
    }while (flag==false);
        System.out.println("註冊成功,請記住密碼!");
}}

輸出結果:在这里插入图片描述

(3)字串拼接
字串拼接的語法格式如下:
字串1.concat(字串2);
字串2被拼接到字串1的後面,返回拼接後的新字串。
範例四:
程式碼展示:

public class Register {
    public static void main(String[] args) {
    String s = new String("你好,");
        String name = new String("張三!");
        String sentence = s.concat(name);
        System.out.println(sentence);
        String sayHi = name + "你好";
        System.out.println(sayHi);
    }
}

輸出結果:在这里插入图片描述
拼接字串的方法有兩種:使用「+」運算子或使用String類的concat()方法。
(4)字串提取和查詢
常用的提取和搜尋字串的方法如下所示:
在这里插入图片描述
範例五:

public class TestString {
    public static void main(String[] args) {
     String str = "  你好 |我1是一名 老2師|教jav3a|歡迎來口碑    ";
     System.out.println(str.trim());//左右去空格
        System.out.println(str.contains("我1是一名"));
        System.out.println(str.startsWith("a", 20));
         byte[] bytes=str.getBytes();
        System.out.println(str.length());
        System.out.println(bytes.length);
    }
}

輸出結果:
在这里插入图片描述
字串是一個字元序列,每一個字元都有自己的位置,字串事實上也是一個字元陣列,因此它的索引位置從0到字串長度-1結束。
範例六:

import java.util.Arrays;
public class TestString2 {
    public static void main(String[] args) {
        String str = "我是一名老師";
        String s = new String(str.getBytes(), 0, 3);
        System.out.println(s);
        char[] chars = str.toCharArray();
        System.out.println(Arrays.toString(chars));//轉成char型別陣列
    }
}

輸出結果:
在这里插入图片描述
(5)字串拆分
字串拆分的語法格式如下:
字串名.split(separator,limit);
separator是可選項,表示根據匹配指定的正則表達式來拆分此字串。如果匹配不上,則結果陣列只有一個元素,即此字串。
limit可選項,該值用來限制返回陣列中的元素個數。
範例七:現有一個字串,它是一段歌詞,每句都以空格「 」結尾,輸出結果如下所示:在这里插入图片描述
分析如下:實現這個需求,只要將每局歌詞按照空格拆分即可。此時就可以使用split()方法實現這個需求。
程式碼展示:

public class Lyric {
    public static void main(String[] args) {
        String words = "長亭外 古道邊 芳草碧連天 晚風扶 柳笛聲殘 夕陽山外山 ";
        String[] printword = new String[100];//定義接收陣列
        System.out.println("***原歌詞格式***\n" + words);
        System.out.println("\n***拆分後歌詞格式***");
        printword=words.split(" ");//按照空格進行拆分
        for (int i = 0; i < printword.length; i++) {
            System.out.println(printword[i]);//列印輸出
        }
    }
}

輸出結果:在这里插入图片描述
範例八:輸入一個字串,再輸入要查詢的字元,判斷該字元在該字串中出現的次數。
在这里插入图片描述
程式碼展示:

import java.util.Scanner;
public class TestAi {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("請輸入字元");
        String r1=sc.next();
        System.out.print("請輸入要查詢的字元:");
        char zi=sc.next().charAt(0);
        char[] a=r1.toCharArray();
        int r=0;
        for (int i = 0; i <r1.length() ; i++) {
            if(zi==a[i])
                r++;
        }
        System.out.println(r1+"中包含"+r+"個"+zi+"字!");
    }
}

輸出結果:
在这里插入图片描述

StringBuffer類和StringBuilder類

使用StringBuffer類處理字串

除了使用String類儲存字串之外,還可以使用StringBuffer類來儲存字串。StringBuffer類也是Java提供的用於處理字串的一個類。而且它是比String類更高效地儲存字串的一種參照數據型別。特別是對字串進行連線操作時,使用StringBuffer類可以大大提高程式的執行效率。
(1)如何使用StringBuffer類
StringBuffer類位於java.util包中,是String類的增強類、StringBuffer類提供了很多方法可供使用。
宣告StringBuffer物件並初始化的方法如下所示:
StringBuffer sb2=new StringBuffer(「青春無悔」);
(2)常用的StringBuffer類方法
①toString()方法
轉換爲String型別的語法格式如下:
字串1.toString();
將StringBuffer型別的字串1轉換爲String型別的物件並返回。
②append()方法
追加字串的語法格式如下:
字串.append(參數);
將參數連線到字串後並返回。
該方法和String類的concat()方法一樣,都是把一個字串追加倒另一個字串後面,所不同的是String類中只能將String型別的字串追加到一個字串後,而StringBuffer類可以將任何型別的值追加到字串之後。
範例九:
使用StringBuffer類實現字串追加。
程式碼展示:

public class SbAppend {
    public static void main(String[] args) {
        StringBuffer sb = new StringBuffer("青春無悔");
        int num = 110;
        //在字串後面追加字串
        StringBuffer sb1 = sb.append("我心永恆");
        System.out.println(sb1);
        //在字串後面追加字元
        StringBuffer sb2 = sb1.append('啊');
        System.out.println(sb2);
        //在字串後面追加整型數位
        StringBuffer sb3 = sb2.append(num);
        System.out.println(sb3);
    }
}

輸出結果:
在这里插入图片描述
③insert()方法
插入字串的語法格式如下:
字串.insert(位置,參數);
將參數插入到字串指定位置後並返回。參數值可以是包括String任何型別。
範例十:編寫一個方法,實現將一個數字字串轉換成以逗號分隔的數位串,即從右邊開每3個數字用逗號分隔
分析:利用StringBuffer類的length()方法,獲取數位串的長度,使用for回圈從後向前每隔3位插入逗號。
程式碼展示:

import java.util.Scanner;
public class TestInsert {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        //接收數位串,存放於StringBuffer型別的物件中
        System.out.print("請輸入一串數位:");
        String nums = sc.next();
        StringBuffer str = new StringBuffer(nums);
        //從後往前每隔3位新增逗號
        for (int i = str.length() - 3; i > 0; i = i - 3) {
            str.insert(i, ',');
        }
        System.out.print(str);
    }
}

輸出結果:
在这里插入图片描述

使用StringBuilder類處理字串

java.lang.StringBuilder是JDK 5.0版本新增的類,它是一個 可變的字元序列。 此類提供一個與StringBuffer 相容的API,被設計用作StringBuffer 的一.個簡易替換,在大多數實現中,它比StringBuffer執行要快。使用StringBuilder類處理字串的方法與StringBuffer類基本一樣。

Sting類、StringBuffer類及StringBuilder類對比

String、StringBuffer和StringBuilder 這3個類在處理字串時有各自的特點和適用場合,具體如下:
(1)String:字串常數
String是不可變的物件,在每次對String型別進行改變時其實都等同於生成了一個新的String物件,然後指向新的String 物件,所以經常改變內容的字串最好不要用String型別,因爲每次生成物件都會對系統效能產生影響。
(2) StringBuffer:字串變數
StringBuffer是可變的字串,在每次對StringBuffer物件進行改變時,會對StringBuffer物件本身進行操作,而不是生成新的物件,再改變物件參照。所以,在字串物件經常改變的情況下推薦使用StringBuffer類。
字串連線操作中,Stringuffer 類的執行效率要比String類高,例如:
String str=new String(「welcome to」);
str+=「here」;
以上這兩句程式碼是使用String型別來操作字串,但其處理步驟實際上是通過建立一個StringBuffer物件,讓它呼叫append()方法,最後再轉化成String,這樣的話,String的連線操作比StringBuffer多出了一些附加操作,當然效率要低。並且由於String物件的不可變性也會影響效能。
(3 ) StringBuilder:字串變數
JDK5.0版本以後提供了StringBuilder類,它和StringBuffer類等價,區別在於StringBuffer類是執行緒安全的,StringBuilder 類是單執行緒的,不提供同步,理論上效率更高。

日期操作類

java.util包也是Java內建的一一個工具包,它包含了集合框架、日期和時間、隨機函數生成器等各種實用工具。java.util 包不會預設匯入,如果要使用該包中的類,則必須在程式的開始部分進行手工匯入。
下面 下麪介紹java.util包中幾個常見的類。
java.util 包中提供的和日期時間相關的類有Date類、Calendar 類和SimpleDateFormat類等。
Date類物件用來表示日期和時間,該類提供了一系列操作 日期和時間各組成部分的方法。Date 類中使用最多的是獲取系統當前的日期和時間,如Date date= new Date();這句程式碼是使用系統當前時間建立日期物件。
Calendar類也是用來操作日期和時間的類,它可以看作是Date類的一個增強版。Calendar類提供了一組方法, 允許把一個以毫秒 爲單位的時間轉換成年、 月、日、小時、分、秒。可以把Calendar類當作是萬年曆,預設顯示的是當前的時間,當然也可以檢視其他時間。
Calendar類是抽象類,可以通過靜態方法getlnstance0O獲得Calender類的物件,其實這個獲得的物件是它的子類的物件。
Calendar類提供一些方法和靜態欄位來操作日曆,例如:
➢int get(int field):返回給定日曆欄位的值。
➢YEAR: 指示年。
➢MONTH: 指示月。
➢DAY_ OF_ MONTH:指示一個月中的某天。
➢DAY OF_ WEEK:指示一個星期中的某天。
另外常用的還有格式化日期時間的類DateFormat類,它在java.text包下,是|一個抽象類,提供了多種格式化和解析時間的方法。格式化是指將日期轉換成文字,解析是指將文字轉換成日期格式。使用比較多的是它的子類SimpleDateFormat,SimpleDateFormat類是一個以與語言環境有關的方式來格式化和解析日期的具體類,如「yyyy-MM-dd HH:mm:ss」就是指定的一種日期和時間格式。
範例十一:

import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
public class TestDate {
    public static void main(String[] args) {
        //格林威治時間1970 01 01 00 00 00 000毫秒到當前毫秒的差值
        long now = System.currentTimeMillis();
       // System.out.println(now/60/60/24/365);
        Date d = new Date();
        System.out.println(d);
        SimpleDateFormat format = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
        String rst = format.format(d);
        System.out.println(rst);
        //SimpleDateFormat f = new SimpleDateFormat();
        System.out.println(d.getTime());
        Calendar c = format.getCalendar();
        System.out.println("當前的年:"+c.getWeekYear());
        System.out.println("一年有多少個周:" + c.getWeeksInWeekYear());
       // System.out.println(c.get(Calendar.MONTH));
        //System.out.println(c.get(Calendar.DAY_OF_MONTH));
      //  System.out.println(c.get(Calendar.DAY_OF_YEAR));
        System.out.println(c.get(Calendar.DAY_OF_WEEK_IN_MONTH));
      //  System.out.println(c.getFirstDayOfWeek());
    }
}

輸出結果:
在这里插入图片描述

Random類

Random類用於生成亂數。每當需要以任意或非系統方式生成數位時,可使用此類。之前學習過的Math類的random()方法也可以產生亂數,其實Math類的random()方法底層就是使用Random類實現的。
Random類中還定義了很多方法用於獲取亂數,最常用的是nextInt()方法,它返回下一個僞亂數,返回值型別是整型。
返回下一個僞亂數的語法格式如下:
int nextInt();
int nextInt(int n);
前者返回下一個僞亂數,它是此亂數生成器的序列中均勻分佈的int值。
後者返回下一個僞亂數,它是取自亂數生成器序列的、在0(包括)和指定值n(不包括n)之間均勻分佈的int值。
範例十二:隨機生成20個10以內或等於0的整數,並將顯示出來。
程式碼展示:

import java.util.Random;
public class RandomDemo {
    public static void main(String[] args) {
        //建立一個Random物件
        Random rand = new Random();
        //隨機生成20個隨機整數,並顯示
        for (int i = 0; i < 20; i++) {
            int num = rand.nextInt(10);
            System.out.println("第"+(i+1)+"個亂數是:"+num);
        }
    }
}

輸出結果:在这里插入图片描述
注意:如果用同樣一個種字值來初始化兩個Random物件,然後用每個物件呼叫相同的方法,那麼得到的亂數也是相同的。