Java字符串地查找操作

2021-01-10 米粒教育

在一個字符串中查找字符或子串是經常使用的操作。String類提供了兩種查找字符串的方法,分別是indexOf()和lastIndexOf(),這兩種方法都返回待查找字符或子串在字符串的起始索引位置。

int indexOf(String s)

該方法用於在字符串中查找與s字符串匹配的子串,若發現匹配的子串,則返回子串的起始位置索引,如果沒有找到與s匹配的子串,返回-1。

調用語法如下:

str.indexOf(s)

其中,str是已創建的字符串對象,s待查找的字符串。

案例1:創建一個字符串對象,使用indexOf()方法查找子串,如查找到子串輸出子串內容,否則輸出查找子串失敗信息。

在PbaseUnit11項目unit包下創建StringSearchSample類。代碼如下:

/**

* @Title: StringSearchSample.java

* @Packageunit

* @Description: Java基礎知識課程案例

* @author編程訓練營

* @date

* @versionV1.0

*/

packageunit;

/**

* @ClassName: StringSearchSample

* @Description: 字符串(字符串查找)案例1

* @author編程訓練營

* @date

*

*/

publicclassStringSearchSample {

/**

* @Title: main

* @Description: Java程序入口main方法

* @param@param args 參數

* @return void 返回類型

* @throws

*/

publicstaticvoidmain(String[] args) {

// 創建String對象

String szTemp = "小明正在學習Java編程";

String szSearch = "編程";

// 使用indexOf查找子串"編程"

intnIndex = szTemp.indexOf(szSearch);

// 若nIndex不等於-1,說明已查找到子串

if( nIndex != -1 )

{

// 從szTemp截取已查找到的子串

String szSub = szTemp.substring(nIndex,nIndex+szSearch.length());

// 輸出子串

System.out.println(szSub);

}

else

{

System.out.printf("沒有查找到子串:%s",szSearch);

}

}

}

程序結構分析

代碼創建了兩個String對象,一個String對象是szTemp,字符串查找操作在該字符串對象進行,一個String對象是szSearch,該字符串是待查找字符串。

使用String類的indexOf()方法在szTemp中查找szSearch,若szTemp內容包含szSearch,則查找成功。indexOf()方法返回szSearch在szTemp中的起始索引,然後使用String類的substring方法截取子串。

程序執行結果如下圖所示:

int lastIndexOf(String s)

該方法在當前字符串中查找子串s,若s多次出現在當前字符串中,該方法會返回s在當前字符串最後一次出現的索引位置。如果沒有找到s,則返回-1。

例如:

在字符串「小明正在學習Java編程,Java編程是他很喜歡的課程」中,查找子串「Java」,lastIndexOf()方法會返回最後出現「Java」的索引位置,即返回索引13。

案例2:創建一個字符串對象,使用lastIndexOf()方法查找子串,如查找到子串輸出子串內容,否則輸出查找子串失敗信息。

在PbaseUnit11項目unit包下創建StringSearchSample2類。代碼如下:

/**

* @Title: StringSearchSample2.java

* @Packageunit

* @Description:Java基礎知識課程案例

* @author編程訓練營

* @date

* @versionV1.0

*/

packageunit;

/**

* @ClassName: StringSearchSample2

* @Description: 字符串(字符串查找)案例2

* @author編程訓練營

* @date

*

*/

publicclassStringSearchSample2 {

/**

* @Title: main

* @Description: Java程序入口main方法

* @param@param args 參數

* @return void 返回類型

* @throws

*/

publicstaticvoidmain(String[] args) {

// 創建String對象

String szTemp = "小明正在學習Java編程,Java編程是他很喜歡的課程";

String szSearch = "Java";

// 使用lastIndexOf查找子串"編程"

intnIndex = szTemp.lastIndexOf(szSearch);

// 若nIndex不等於-1,說明已查找到子串

if( nIndex != -1 )

{

// 輸出子串的索引位置

System.out.println("查找子串索引位置為:" + nIndex);

// 從szTemp截取已查找到的子串

String szSub = szTemp.substring(nIndex,nIndex+szSearch.length());

// 輸出子串

System.out.println(szSub);

}

else

{

System.out.printf("沒有查找到子串:%s",szSearch);

}

}

}

程序結構分析

代碼使用lastIndexOf()方法查找子串szSearch,szSearch在szTemp出現兩次,lastIndexOf()方法會返回szSearch最後一次出現的位置索引。

程序執行結果如下圖所示:

相關焦點

  • 跟我學java編程—認識java語言的字符類型
    示例1:字符賦值並輸出到命令行窗口在D盤Java目錄下,新建「CharSample.java」文件。用記事本打開「CharSample.java」文件,輸入以下代碼:編譯「CharSample.java」文件,在命令行窗口輸入「javac CharSample.java」並執行命令,編譯通過後,在命令行窗口輸入「java CharSample」運行Java程序,命令行窗口顯示如下信息:
  • JavaScript字符串 - 查找方法
    字符串查找的方法子字符串代表的就是要查找的字符串1.indexOf();格式:字符串.indexOf( 子字符串串,開始查找的位置 );返回值:如果在字符串中查找到了子字符串第一次出現的位置,返回子字符串出現的位置,否則沒有查找到返回 -
  • JAVA編程——二分法查找
    一、二分法檢索過程二分法檢索(binary search)又稱折半檢索,二分法檢索的基本思想是設數組中的元素從小到大有序地存放在數組(array)中(註:二分法查找的關鍵,首先數組元素必須從小到大有序排列),(1)首先將給定值 key 與數組中間位置上元素的關鍵碼(key)比較,如果相等,則檢索成功
  • java之字符緩衝輸出流,BufferedWriter的簡單介紹
    各位小夥伴們,大家好在之前的文章中小編介紹了字節緩衝流的相關知識,這次小編要介紹的是字符緩衝輸出流,BufferedWriter,具體如下:java.io.BufferedWriter extends Writer
  • 數據結構java面試題及答案
    它也是面試最喜歡的問題之一,在代碼面試中你會經常聽到很多關於數組的問題,例如,數組的反轉、數組的排序或者查找數組中的一個元素。數組結構的一個關鍵優點是在知道索引的情況能夠以O(1)的複雜度找到一個元素。但是增加或者刪除一個元素是很慢的,因為一旦創建了一個數組,你就不能改變它的大小了。
  • 一起學JAVA——數組和函數
    之前我們介紹了java的數據類型、變量、流程控制等內容。今天我們高級數據類型——數組以及函數的作用。函數(方法)函數的定義函數就是一段有名字的代碼,可以完成某一特定功能。方法(函數)是java的最小代碼重用單位,方法(函數)是為了重用代碼。方法不能嵌套方法,不能在一個方法內部定義另外一個方法。可以在一個方法內部調用另外一個方法。
  • (提高Java代碼質量)|25個優化Java代碼的小技巧
    反例:正例:5.字符串拼接使用 StringBuilder一般的字符串拼接在編譯期 java 會進行優化,但是在循環中字符串拼接,java 編譯期無法做到優化,所以需要使用 StringBuilder 進行替換。
  • Java之File類的構造方法
    小編先來介紹一下構造方法1:File(String pathname)通過給定路徑名字符串轉換為抽象路徑名來創建一個新File實例參數:String pathname:字符串的路徑名稱路徑可以是以文件結尾
  • JAVA中的File類的操作與小爬蟲的製作
    File類(java.io.File;)Java中所有的目錄都被當成File 對待,它直接處理文件和文件系統。也就是說,File類沒有指定信息怎樣從文件讀取或向文件存儲;它描述了文件本身的屬性。File對象用來獲取或處理與磁碟文件相關的信息,例如權限,時間,日期和目錄路徑。
  • 從String中移除空白字符的多種方式!?差別竟然這麼大!
    我們在日常開發時候會經常使用字符串做很多的操作。比如字符串的拼接、截斷、替換等。 這一篇文章,我們介紹一個比較常見又容易被忽略的一個操作,那就是移除字符串中的空格。 其實,在Java中從字符串中刪除空格有很多不同的方法,如trim,replaceAll等。
  • Java常見內存溢出異常分析
    下面我們通過如下的代碼來演示一下此種情況的溢出:   [java] view plain copyimport java.util.*;   import java.lang.,那麼就不會觸發gc操作也不會出現異常了。
  • java操作ES整個流程介紹
    一 準備工作下載elasticsearch-6.7.0和展示ES數據的界面工具elasticsearch-head-master,本人電腦已安裝IntelliJ IDEA 2019.3 x64的java工具。簡單點,我們直接按默認配置學習。windows直接點擊elasticsearch.bat啟動ES。
  • pandas向量化字符串操作方法!
    作者:小伍哥 來源:AI入門學習python內置一系列強大的字符串處理方法,但這些方法只能處理單個字符串,處理一個序列的字符串時,需要用到循環。那麼,有沒有辦法,不用循環就能同時處理多個字符串呢,pandas的向量化操作就提供了這樣的方法。
  • 萬字梳理,帶你拿下 Java 面試題!
    線程安全性:HashMap 不是線程安全的,如果多個外部操作同時修改 HashMap 的數據結構比如 add 或者是 delete,必須進行同步操作,僅僅對 key 或者 value 的修改不是改變數據結構的操作。
  • 2020年Java基礎高頻面試題匯總
    從底層源碼來看是一個nal類型的字符數組,所引用的字符串不能被改變,一經定義,無法再增刪改。每次對String的操作都會生成新的String對象。private final char value[];每次+操作 :隱式在堆上new了一個跟原字符串相同的StringBuilder對象,再調用append方法 拼接+後面的字符。
  • Java反射機制深入詳解
    反射是java語言的一個特性,它允程序在運行時(注意不是編譯的時候)來進行自我檢查並且對內部的成員進行操作。例如它允許一個java的類獲取他所有的成員變量和方法並且顯示出來。Java 的這一能力在實際應用中也許用得不是很多,但是在其它的程序設計語言中根本就不存在這一特性。例如,Pascal、C 或者 C++ 中就沒有辦法在程序中獲得函數定義相關的信息。
  • Excel Find函數與FindB函數使用方法,含用數組一次查找多個值
    在 Excel 中,查找指定字符在源字符串中的位置,既可以用 Find函數,也可以用 FindB函數,它們都有三個參數,所不同的是,前者把漢字、字母和數字都算一個字符,後者把漢字算兩個字節,數字和字母算一個字節。
  • Java基礎學習:java中的基本數據類型
    3、字符類型 char類型變量是用來儲存Unicode編碼的字符的,unicode字符集包含漢字。 注意:可能存在特殊生僻字沒有包含在unicode編碼字符集中。
  • 給JAVA程式設計師的正則表達式一課
    在任何表達式中添加「^」會否定該表達式的含義,例如[^abc]表示匹配任何除abc外的任何字符。()表示分組,分組後可以在後續反向引用。反向引用存儲與組匹配的字符串部分。可以使用符號$來引用特定的組。$1,$2…代表第一組1,第2組等。默認組為$0,表示字符串本身。例如,我們要刪除行中的所有空格。