String類基礎的那些事!
第三階段 JAVA常見物件的學習
第一章 常見物件——String類
(一) String 類的概述及其構造方法
(1) 概述
多個字元組成的一串資料,例如 “abc” 也可以看成是一個字元陣列。
而通過 API我們又可以知道
A:字串字面值“abc”也可以看成是一個字串物件
B:字串是常量,一旦被賦值,就不能改變
(2) 構造方法
//空構造 public String() //把位元組陣列轉換成字串 public String(byte[] bytes) //把位元組陣列的一部分轉換成字串 public String(byte[] bytes,int offset,int length) //把字元陣列轉換成字串 public String(char[] value) //把字元陣列的一部分轉換成字串 public String(char[] value,int offset,int count) //把字串常量值轉換成字串 public String(String original) //下面的這一個雖然不是構造方法,但是結果也是一個字串物件 String s = "hello";
簡單總結:String類的構造方法可以將 位元組、字元陣列、字串常量(全部或者部分)轉換為字串型別
(3) 字串方法
//返回此字串的長度
public int length ();
(4)構造方法和lenght方法的小案例
//以前三個為例 public class StringDemo { public static void main(String[] args) { //public String():空構造 String s1 = new String(); System.out.println("s1:" + s1); System.out.println("s1.length:" + s1.length()); System.out.println("-------------------------"); //把位元組陣列轉換成字串:public String(byte[] bytes) byte[] bys = {97,98,99,100,101}; //abcde String s2 = new String(bys); System.out.println("s2:" + s2); System.out.println("s2.length:" + s2.length()); System.out.println("-------------------------"); //把位元組陣列的一部分轉換成字串: //public String(byte[] bytes,int offset,int length) String s3 = new String(bys,1,3); System.out.println("s3:" + s3); System.out.println("s3.length:" + s3.length()); } } //執行結果: s1: s1.length:0 ------------------------- s2:abcde s2.length:5 ------------------------- s3:bcd s3.length:3
注:97,98,99,100,101 在ASCII碼中代表abcde,不熟悉的朋友請自行查閱
(5) 經典例題(必看)
例題一:
/* * 字串特點:一旦被賦值,就不能改變 */ public class StringDemo { public static void main(String[] args) { String s = "Hello"; s += "World"; System.out.println("s:" + s); } } //執行結果: s:HelloWorld
**解釋:**不能改變是指字串物件本身不能改變,而不是指物件的引用不能改變,上述過程中,字串本身的內容是沒有任何變化的,而是分別建立了三塊記憶體空間,(Hello) (World) (HelloWorld) s → Hello + World → HelloWorld 。String內容的改變實際上是通過字串之間的拼接、斷開進行的,如上例中拼接後s的引用也就指向了 拼接後的HelloWorld
總結:開發中,儘量少使用 + 進行字串的拼接,尤其是迴圈內,我們更加推薦使用StringBuild、StringBuffer,此內容下一篇詳細講解。
例題二:
//兩者的區別
String s = new String("hello");
String s = "hello";
前者建立了2個 (1個) 物件,後者建立了1個 (0個) 物件
下面解釋中若存在情況滿足則,分別為建立1個和0個物件
解釋:
String s = new String("hello"); 建立例項過程
在堆中建立一個物件 “hello” (new出來的),讓 s 引用這個物件
在字串常量池中查詢是否存在內容為 “hello”的字串物件
A:若存在,將new出的物件與字串常量池中已存在的相聯絡
B:若不存在,則在字串常量池中建立一個內容為 "abc" 的字串物件,並與堆中 的對相聯絡
String s = "hello"; 建立例項過程
在字串常量中查詢是否存在內容為"hello"的字串物件
A:若存在,讓s直接引用該物件
B:若不存在,則直接讓s引用該物件
總結:前者new一個物件,“hello”隱式建立一個物件,後者只有“hello”建立一個物件,在開發中,儘量使用 String s = "hello" 的方式,效率比另一種高。
例題三:
public class StringDemo {
public static void main(String[] args) {
String s1 = new String("hello");
String s2 = new String("hello");
System.out.println(s1 == s2);//false
System.out.println(s1.equals(s2));//true
String s3 = new String("hello");
String s4 = "hello";
System.out.println(s3 == s4);//false
System.out.println(s3.equals(s4));//true
String s5 = "hello";
String s6 = "hello";
System.out.println(s5 == s6);//true
System.out.println(s5.equals(s6));//true
}
}
//執行結果
false
true
false
true
true
true
解釋: == 比較地址值是否相同、String中的equals()比較字串內容是否一致
例題四:
public class StringDemo2 {
public static void main(String[] args) {
String s1 = "Hello";
String s2 = "World";
String s3 = "HelloWorld";
System.out.println(s3 == s1 + s2);
System.out.println(s3.equals(s1 + s2));
System.out.println(s3 == "Hello" + "World"); //重點
System.out.println(s3.equals("Hello" + "World"));
}
}
//執行結果
false
true
true
true
總結:
- 字串中如果是變數相加,先開空間,再拼接
- 字串中如果是字串相加,是先加,然後在常量池中找,如果有就直接返回否則就建立
(二) String類的功能
(1) 判斷功能
//比較字串的內容是否相同,區分大小寫
boolean equals(Object obj)
//比較字串的內容是否相同,不區分大小寫
boolean equalsIgnoreCase(String str)
//判斷大字串中是否包含小字串
boolean contains(String str)
//判斷某個字串是否以某個指定的字串開頭
boolean startsWith(String str)
//判斷某個字串是否以某個指定的字串結尾
boolean endsWith(String str)
//判斷字串是否為空
boolean isEmpty()
注意:
String s = “ ”; // 字串內容為空
String s = null; // 字串物件為空
簡單模擬登入案例 (String版)
import java.util.Scanner;
/*
* 模擬登陸案例,給三次機會,並且提示剩餘次數
* A:定義使用者名稱和密碼(已經存在的)
* B:鍵盤錄入使用者名稱和密碼
* C:比較使用者名稱和密碼
* D:給三次機會,用迴圈改進
*/
public class StringDemo {
public static void main(String[] args) {
for (int x = 0; x < 3; x++) {
String username = "admin";
String password = "admin888";
Scanner sc = new Scanner(System.in);
System.out.println("請輸入使用者名稱");
String name = sc.nextLine();
System.out.println("請輸入密碼");
String psw = sc.nextLine();
if (name.equals(username) && psw.equals(password)) {
System.out.println("登入成功");
} else {
if ((2 - x) == 0) {
System.out.println("你的賬號已經被鎖定,請與管理員聯絡");
} else {
System.out.println("登入失敗,你還有" + (2 - x) + "次機會");
}
}
}
}
}
(2) 獲取功能
//獲取字串的長度
int length()
//獲取指定索引的字元
char charAt(int index)
//返回指定字元在此字串中第一次出現的索引
int indexOf(int ch)
//為什麼這裡是int而不是char?
//原因是:‘a’和‘97’其實都能代表‘a’ int方便
//返回指定字串在此字串中第一次出現的索引
int indexOf(String str)
//返回指定字元在此字串中從指定位置後第一次出現的索引
int indexOf(int ch,int fromIndex)
//返回指定字串在此字串中從指定位置後第一次出現的索引
int indexOf(String str,int fromIndex)
//從指定位置開始擷取字串,預設到末尾
String substring(int start)
//從指定位置開始指定位置結束擷取字串
String substring(int start,int end)
字串中資料統計案例
import java.util.Scanner;
/*
* 案例:統計一個字串中大寫字母字元,小寫字母字元,數字字元出現 * 的次數
*/
public class StringDemo {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("請輸入需要統計的資料");
String s = sc.nextLine();
int numberCount = 0;
int smallCout = 0;
int bigCout = 0;
for (int x = 0; x < s.length(); x++) {
char ch = s.charAt(x);
if (ch >= 'a' && ch <= 'z') {
smallCout++;
} else if (ch >= 'A' && ch <= 'a') {
bigCout++;
} else if (ch >= '0' && ch <= '9') {
numberCount++;
}
}
System.out.println("大寫字母:" + bigCout + "個");
System.out.println("小寫字母:" + smallCout + "個");
System.out.println("數字:" + numberCount + "個");
}
}
//執行結果
請輸入需要統計的資料
HelloWorld520
大寫字母:2個
小寫字母:8個
數字:3個
(3) 轉換功能
//把字串轉換為位元組陣列
byte[] getBytes()
//把字串轉換成字元陣列
char[] toCharArray()
//把字元陣列轉換成字串
static String valueOf(char[] chs)
//把int型別的資料轉換成字串
static String valueOf(int i)
//注意:String類的valueOf方法可以把任何型別的資料轉換成字串!
//把字串轉換成小寫
String toLowerCase()
//把字串轉換成大寫
String toUpperCase()
//把字串拼接
String concat(String str)
(4) 其他功能
//替換功能
String replace(char old,char new)
String replace(String old,String new)
//去除字串兩端空格
String trim()
//按字典比較功能
int compareTo(String str)
int compareToIgnoreCase(String str)
逆序輸出字串案例
/*
* 鍵盤輸入 "abc"
* 輸出結果 "cba"
*/
import java.util.Scanner;
public class StringDemo2 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("請輸入:");
String line = sc.nextLine();
char[] chs = line.toCharArray();
String result = "";
for (int x = chs.length - 1; x >= 0; x--) {
result += chs[x];
}
System.out.println("reusult:" + result);
}
}
//執行結果
請輸入:
abc
reusult:cba
大串中查詢小串案例
import java.util.Scanner;
public class StringDemo {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("請輸入被統計的資料");
String maxString = sc.nextLine();
System.out.println("請輸入統計關鍵詞");
String minString = sc.nextLine();
int count = getCount(maxString, minString);
System.out.println("count:" + count);
}
public static int getCount(String maxString, String minString) {
//定義一個統計變數,初始化為0
int count = 0;
//先在大串中查詢小串第一次出現的位置
int index = maxString.indexOf(minString);
//索引不是-1,說明存在,統計變數++
while (index != -1) {
count++;
//把剛才的索引 + 小串的長度作為開始位置擷取上一次的大串
//返回一個新的字串,並把該字串的值重新賦給大串
int startIndex = index + minString.length();
maxString = maxString.substring(startIndex);
index = maxString.indexOf(minString);
}
return count;
}
}
//執行結果
請輸入被統計的資料
Hello520World520
請輸入統計關鍵詞
520
count:2
結尾:
如果內容中有什麼不足,或者錯誤的地方,歡迎大家給我留言提出意見, 蟹蟹大家 !^_^
如果能幫到你的話,那就來關注我吧!(系列文章均會在公眾號第一時間更新)
在這裡的我們素不相識,卻都在為了自己的夢而努力 ❤
一個堅持推送原創Java技術的公眾號:理想二旬不止
相關推薦
String類基礎的那些事!
第三階段 JAVA常見物件的學習 第一章 常見物件——String類 (一) String 類的概述及其構造方法 (1) 概述 多
c++ string類的完整實現!!!
class sun double ref basic 更新 方便 iterator locate 本文實現了c++ STL中的basic_string模板類,當然。通過typedef也就實現了string類和wstring類。限於篇幅,實現代碼中用到了標準庫的char_
前端開發和其他類別工程師配合的那些事!
png 工程 圖標 開發 nmp nodejs 利用 父類 轉換 實際開發項目中,前端工程師需要和美工、後端、產品經理配合來完成一個產品,今天就簡單說說前端工程師和這些類別工程師配合的那些事。 一、前端攻城獅和美工配合的那些事 懂得圖片理論基礎 常見的圖片格式包含以
JS 函數作用域及變量提升那些事!
向上 沒有 asc 程序 ole 理解 繼續 不知道 階段 一直以來小編對js函數作用域及變量提升的理論知識,雖然看了多次,但也是一知半解~ 這幾天做了幾道js小題,對這部分進行了從新的理解,還是有所收獲的~ 主要參考書籍: 《你不知道的JavaScript(上卷)》第
分享一下身邊朋友自學android開發及找工作的那些事!【不足勿噴】
自己的 tis 快速 就是 和我 and 好處 adapt 分享 寫在前面 前不久身邊一個朋友突然告訴我他把原來的工作辭掉了,我問他最近在幹嘛,他說他最近兩個月學了java及android然後花了1周時間找工作,我問他現在怎麽樣了。他說比不上我們身邊這些10K-20K的現在
一文歸納總結分散式架構中的那些事!
進入十一月,最火熱的話題與期待的日子自然是雙十一狂歡購物節了,作為程式設計師的你除了要清空自己的購物車之外,最關心的是不是雙十一架構技術是如何承受億級使用者流量的衝擊,又是如何在分散式架構中實現單點登陸,形成支援高併發,高可用的分散式架構技術呢?下面小編就來幫你總結如何從0到1學習分散式架構技術
盤點趙麗穎和馮紹峰官宣引爆微博,你不知道的那些事!
10月16日是趙麗穎的31歲生日,上午10時許,趙麗穎和馮紹峰一同在微博晒出了二人的結婚照,官宣正式結婚。致使微博幾度陷入癱瘓,其公佈訊息的“官宣體”更是引發了眾多媒體和個人的模仿。范冰冰的“我們體”,鹿晗的“大家好,給大家介紹一下,這是我的女朋友@”,我們不難發現,明星們簡單的一句話公開戀情方式總是會頻頻引
一文歸納總結分散式架構的那些事!
雙十一購物狂歡節已經過去了,作為程式設計師的你,除了在關心自己的快遞的運送情況之外,最關心的是不是雙十一架構技術是如何承受億級使用者流量的衝擊,又是如何在分散式架構中實現單點登陸,形成支援高併發,高可用的分散式架構技術呢?下面小編就來幫你總結如何從0到1學習分散式架構技術,如何實現從小白到架構師的蛻變!!
一文歸納分散式架構的那些事!
進入十一月,最火熱的話題與期待的日子自然是雙十一狂歡購物節了,作為程式設計師的你除了要清空自己的購物車之外,最關心的是不是雙十一架構技術是如何承受億級使用者流量的衝擊,又是如何在分散式架構中實現單點登陸,形成支援高併發,高可用的分散式架構技術呢?下面小編就來幫你總結如何從0到1學習分散式架構技術,如
應屆生校園招聘——程式設計師求職的那些事!
2012年9月,本人加入到大學生求職大軍的行列中。今年的經濟環境不是很好,大家都找到工作了嗎?不管怎麼樣,只要我們堅持下去,一定能夠找到屬於自己的工作。 首先,自己介紹下,本人為東北一所不知名的211工程大學的小碩。每一年到我們學校的招聘會其實是很多的,有國企,私企等等。本
HttpServlet背後的那些事!
閱讀本篇文章大約花費您4分鐘! 我們自己新建一個Servlet類的時候,我們通常會繼承自HttpServlet類,並且編譯器也是預設幫我們繼承了HttpServlet類,為什麼我們要繼承HttpSerlvet類呢?初學Web的同學一定知道Servlet類,並且熟知裡面的五個方法
說說溢算那些事~!你的計算方式溢算了嗎?
遊戲快正式上線了,今天發現一個bug,讓人哭笑不得。資料計算溢位了;玩家充值的元寶變為了0;這個可是一件大事,畢竟誰都擔不起這個責任啊; 來說說原因吧。開發語言是 java 工具是 netbeans ide 8.0.2 玩家物件有一個屬性是 gold 是int型別的; 玩家充值的時候計算方式如下.
PHP中echo、print、print_r、printf、sprintf和var_dump的區別比較那些事!
1、echoecho()輸出一個或多個字串。不是一個函式,而是php語句,因此您無需對其使用括號。不過,如果您希望向 echo() 傳遞一個以上的引數,那麼使用括號會發生解析錯誤。而且echo是返回void的,並不返回值,所以不能使用它來賦值。例子: <?php
JAVA#String類基礎'札記
public static void main(String[] args) { String s1="kobe"; String s2="kobe"; String s3=new String("kobe"); String s4
MVC框架中Controller層經常做的那些事!
1.請求Controller後直接轉發到別的介面中 1.第一種寫法 @RequestMapping("user/toLogin") public ModelAndView toLogin(){
Android中BuildConfig類的那些事
宣告 本文章都只是在AndroidStudio基於Gradle構建專案開發的驗證,所以不保證其它開發環境與構建專案方式也是這樣 BuildConfig身在何處 瞭解一個東西前,至少先要知道這東西在哪裡吧!而我們今天要了解的這個類又在哪裡了,我相信應該還
MySQL中關於JSON你不得不知道的那些事!
MySQL新增的JSON資料型別讓關係資料庫用起來更簡單,並且模糊了SQL和NoSQL資料庫的界限。 從前有了一臺電腦,然後有人built了第二臺電腦,並且想要一些第一臺電腦上的程式碼。這就意味著我們需要一種不借助底層硬體的方式來移動資訊。
數位電路基礎那些事1——組合邏輯:從譯碼器到編碼器
宣告:本文部分內容選自《數位電子技術基礎系統方法》與 華中科技大學的《電子技術基礎 數字部分》,筆者將其兩者精華加上自身的理解整理成一篇文章,使知識點易於理解! 如有疏漏歡迎指出! 譯碼器 1. 譯碼器定義 譯碼器是一種用以檢測
聊聊WindowServer那些事!
### 前言說明 + 使用工具:VS2019 + 思考為什麼要使用WindowServer,它能做什麼了?(後面解答) ### 一:什麼是WindowServer?(我們做的是一個什麼東西?) Microsoft
Java基礎7:關於Java類和包的那些事
mod 重名 引入 java源代碼 第一個 lan 函數 org object Java基礎7:關於Java類和包的那些事 *.Java文件 問題:一個”.java”源文件中是否可以包括多個類(不是內部類)?有什麽限制? 答案:可以有多個類,但只能有一個public的