跳到主要內容

[Java] substring 的參數: beginIndex 和 endIndex 的理解

在 Java 的某些方法中,我們會注意到參數會需要代入頭尾的 index

舉例來說

String類別的 substring 方法,可以回傳某字串的子字串
其中一種多載(Overloading)形式是帶有參數 int beginIndex
會回傳以該index為首,直到字串尾的子字串

EX:
S1 = "abcdef";
S2 = S1.substring(2);
S2 = "cdef"

另一種多載形式帶有兩個參數,int beginIndex 和 int endIndex
按前面的理解就是包含以 beginIndex 為首,endIndex 為尾的子字串
但事實並非如此

S2 = S1.substring(2, 5);
S2 = "cde"

這裡的 endIndex 不包含在 substring
也就是範圍 (2, 5) 是2, 3, 4,不包含 5,子字串長度為 3
所以實際上 substring(int beginIndex,  int endIndex)指的是

回傳原字串 從 beginIndex 到 endIndex-1 索引範圍的子字串

為什麼要這樣定義呢?

你可能會發現,此字串的長度可以透過 endIndex - beginIndex 而得
此外,以下式子也成立
substring(a, c) = substring(a, b) + substring(b, c)  (a < b < c)

再者,字串的 index 是從 0 ~ n-1 (假設字串長度為 n )
因此,我們也可以用這個範圍的子字串代表原字串:
即  s = s.substring(0, n-1)

---------------------------------------------------------
另外一個例子是 Arrays 類別的 fill 方法
可以將一維陣列中特定數量(部分或全部)的元素設定成新的相同數值
針對不同資料型別的陣列也有不同多載形式
以 int 為例
fill(int[] a, int fromIndex, int toIndex, int val)
參數:
a[] 一維陣列
fromIndex, toIndex 要更動的範圍
val 新的數值

arr[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
Arrays.fill(arr, 2, 5, 0);

新陣列
arr = {1, 2, 0, 0, 0, 6, 7, 8, 9, 10};
index 2 ~ (5-1) 範圍的值改為 0

p.s.
fill方法也有只包含 int[]a 與 int val 參數的形式
就是將陣列的所有內容都以 val 取代

實作範例:

留言

這個網誌中的熱門文章

【Ubuntu】Terminal 複製貼上的方法

Ctrl C + Ctrl V 能使用嗎? 有常常透過Ubuntu在指令海裡摸索的一定不陌生 在Terminal裡我們不能用Ctrl C + Ctrl V來進行複製貼上的作業 每次都不小心Ctrl C下去,就要抱頭痛哭QQ (在Terminal裡面是呼叫一個外部中斷,強制中止當下系統的動作) 其實在Terminal當中也有複製貼上的功能 Ctrl + Shift + C 複製 Ctrl + Shift + V 貼上 功能相當於一般的複製貼上,也只是多按一個Shift,相信不是太難適應 如果是透過VirtualBox建立的Ubuntu 想要跟主機互通的話,可以參考這篇: [VirtualBox] 共用剪貼簿與檔案 另外,在Terminal裡也有所謂的暫存剪貼簿,是針對指令設計的 Ctrl + U 剪下游標前的字元到剪貼簿 Ctrl + K 剪下游標後的字元到剪貼簿 Ctrl + Y 貼上 所謂的游標就是打指令的那行閃爍的位置 所以其他畫面上系統輸出的文字不會受影響,才說是針對指令設計 這個暫存的剪貼簿也跟一般的是分開的,或許會有派上用場的一天吧!

【Ubuntu】關閉預設畫面自動鎖定

近期一直碰到一個小麻煩 在Ubuntu VM做研究時 因為平常會在本機Search,才去VM操作 卻發現每次畫面跳去Ubuntu那邊 都還要重新打密碼登入,很惱人 怒查之下,原來這個動作叫  畫面鎖定 反正VM就是個測試環境,根本不需要這些安全措施 透過下面步驟就可以取消了 甚至連開機登入時都可以不用打密碼了呵呵

[Java] HashMap資料結構簡介與用法

Java HashMap 官方文件: https://docs.oracle.com/javase/7/docs/api/java/util/HashMap.html import java.util.HashMap; 簡介: 以每個獨立的 key 對應一個 value 特性: 資料(K, V)原則上是一對一 key不能重複,若重複宣告,後者會取代前者 資料不會排序,預設是先宣告的在前面(呼叫整個 HashMap 的話) 用途: 建立對應表(轉換表),一 key 對一 value 像是學生成績表,以名字做為 key,查詢 key 可以得對應的成績 value 資料格式: HashMap<K,V> K: key V: value 用法: 1. 宣告 : 型別是 reference,不能存基本型別,像整數要寫 Integer 而非 int HashMap<String, String> hashmap = new HashMap<String, String>(); HashMap<String, String> hashmap = new HashMap<>(); HashMap<String, Integer> hashmap = new HashMap<>(); 2.新增資料 : 同時給Key-Value參數,新增這筆資料到該hashMap hashmap.put("Item 1", "Value 1"); hashmap.put("Item 1", 25); 3.刪除資料 : 根據參數Key刪掉對應的Key-Value資料 hashmap.remove("Item 1"); 4.取特定key對應的值 hashmap.get("Item 1"); 5.顯示整個HashMap內容 System.out.println("內容:" + hashmap); for(String Key: map.keySet()){ System.out.println(Key + " &