Trong hướng dẫn này, chúng ta sẽ xem xét các ví dụ về cách kiểm tra xem một Chuỗi có bắt đầu bằng một chuỗi con trong Java hay không. Chúng tôi sẽ trình bày về Core Java cũng như các phương thức Apache Commons.

Bạn đang xem : kiểm tra xem chuỗi có bắt đầu bằng java không

Giới thiệu

Trong bài viết này, chúng ta sẽ xem xét cách kiểm tra xem một Chuỗi có bắt đầu bằng một Chuỗi khác trong Java hay không.

Đây là một nhiệm vụ khá phổ biến trong lập trình và rất giống với kiểm tra xem một chuỗi có chứa chuỗi con hay không. Ví dụ: điều này có thể hữu ích nếu chúng ta muốn lọc tất cả các từ ra khỏi một lựa chọn khổng lồ bắt đầu bằng một Chuỗi cụ thể.

Tuy nhiên, vấn đề này khác với việc kiểm tra xem một Chuỗi chỉ chứa một chuỗi con cụ thể hay không và có một số cách để thực hiện việc này trong cả Core Java và Apache Commons:

Core Java

Hãy bắt đầu với các giải pháp có thể dễ dàng triển khai bằng Core Java.

String.startsWith ()

Phương pháp này thực hiện chính xác những gì chúng ta cần – và là cách phổ biến nhất để giải quyết vấn đề này. Nó trả về một boolean , cho biết chuỗi có bắt đầu bằng từ khóa được cung cấp hay không:

  String string = 

"mọi kết thúc là một khởi đầu mới"

; System.out.println (string.toLowerCase (). StartedWith (

"new"

.toLowerCase ())); System.out.println (string.toLowerCase (). StartedWith (

"EVERY"

.toLowerCase ())); System.out.println (string.toLowerCase (). StartedWith (

""

));

Chạy kết quả đầu ra này:

  false
thật
thật
 

Lưu ý: Nếu tham số được truyền là một chuỗi trống, kết quả luôn là true .

Tất nhiên, phương thức này phân biệt chữ hoa chữ thường và luôn phải được sử dụng cùng với toLowerCase () hoặc toUpperCase () khi chúng tôi chỉ đang tìm một từ khóa cụ thể và không quan tâm xem các trường hợp có khớp hay không.

Stream.anyMatch ()

Một điều khác mà chúng tôi có thể kiểm tra là liệu một Chuỗi có bắt đầu bằng nhiều chuỗi con hay không. Giả sử, chúng tôi có một vài tiền tố được chuẩn hóa – chúng tôi có thể sử dụng tạo Luồng các chuỗi con và chạy kiểm tra anyMatch () cho Chuỗi mà chúng tôi đang kiểm tra.

Hãy xem cách thực hiện điều đó:

  String string = 

"mọi kết thúc là một khởi đầu mới" ; System.out.println (Stream.of (

"every"

,

"none"

) .anyMatch (chuỗi ::bắt đầu với));

Tại đây, chúng tôi đã tạo một Luồng gồm các chuỗi con có thể có và kiểm tra xem có bất kỳ chuỗi con nào trong số đó xuất hiện ở đầu Chuỗi đã cho hay không bằng một lệnh gọi tham chiếu phương thức tới startedWith () < / code>.

Đoạn mã này dẫn đến:

  true
 

String.indexOf ()

Phương thức indexOf () có thể khá hữu ích trong việc giải quyết nhiều vấn đề liên quan đến chuỗi con, bao gồm cả việc kiểm tra xem một chuỗi có bắt đầu bằng một chuỗi cụ thể hay không.

Phương thức trả về chỉ mục của lần xuất hiện đầu tiên của một chuỗi con trong một chuỗi nếu nó được tìm thấy, nếu không thì -1 .

Nó có một số biến thể quá tải mà từ đó chúng tôi sẽ chỉ cần một biến thể bên dưới, vì các biến thể khác có các thiết bị khác nhau:

  

public

int

indexOf

(Chuỗi str)

Nếu phương thức indexOf () trả về 0 , điều đó có nghĩa là Chuỗi của chúng tôi bắt đầu bằng một chuỗi khác mà chúng tôi đã cung cấp dưới dạng tham số.

Ví dụ:

  String string = 

"Chỉ là một chuỗi mẫu"

; System.out.println (string.toLowerCase (). IndexOf (

"just"

.toLowerCase ())); System.out.println (string.toLowerCase (). IndexOf (

"String"

.toLowerCase ())); System.out.println (string.toLowerCase (). IndexOf (

"cái gì đó khác"

.toLowerCase ()));

sẽ xuất:

  0
14
-1
 
  • Câu trả lời mà chúng tôi đang tìm kiếm được tìm thấy trong ví dụ đầu tiên của chúng tôi, vì nó trả về 0 - chính xác những gì chúng tôi cần, nghĩa là chuỗi của chúng tôi bắt đầu bằng một tham số nhất định.
  • Chúng ta có thể thấy rõ rằng trong ví dụ thứ hai, tham số "String" mà chúng tôi đã cung cấp thực sự được tìm thấy trong Chuỗi của chúng tôi, nhưng ở vị trí 14 , không phải là những gì chúng tôi đang tìm kiếm.
  • Ví dụ thứ ba thậm chí không được chứa trong Chuỗi của chúng tôi và trả về -1 .

Sử dụng thông tin ở trên, chúng ta có thể tích lũy logic trong một hàm:

  

public

static

boolean

startedWithSubstring

(Chuỗi văn bản, Từ khóa chuỗi)

{

return

text.toLowerCase (). indexOf (keyword.toLowerCase ()) ==

0

; }

Mẫu có Regex và Matcher

Lớp Pattern là một biểu diễn đã biên dịch của một biểu thức chính quy. Với Mẫu này, sau đó, chúng tôi có thể tạo một công cụ nhận dạng biểu thức chính quy - chúng tôi có thể tạo một Matcher .

Chúng tôi sẽ sử dụng phương thức find () kết hợp với start () để kiểm tra xem phiên bản Matcher của chúng tôi có bắt đầu bằng một Chuỗi:

  

public

static

boolean

startedWithSubstring

(Chuỗi văn bản, Từ khóa chuỗi)

{ String inputString = text.toLowerCase (); String subString = keyword.toLowerCase (); Mẫu mẫu = Pattern.compile (chuỗi con); Matcher matcher = pattern.matcher (inputString);

nếu

(matcher.find ()) {

return

matcher.start () ==

0

; }

return

false

; }

Hãy thử nghiệm phương pháp này:

  System.out.println (startedWithSubstring (string, 

"every"

));

Điều này dẫn đến:

  true
 

Sử dụng vòng lặp for

Một cách giải quyết vấn đề này ở mức độ thấp hơn sẽ là sử dụng vòng lặp vòng lặp.

Chúng tôi lặp lại toàn bộ độ dài của chuỗi tìm kiếm, chúng tôi so sánh các ký tự searchString.length () đầu tiên và trả về true nếu tất cả đều khớp.

Hãy xem tất cả điều này hoạt động như thế nào trong mã:

  

public

static

boolean

startedWithSubstring

(Chuỗi văn bản, Từ khóa chuỗi)

{

cho

(

int

i =

0

; i & lt; keyword.length (); i ++) {

if

(text.toLowerCase (). charAt (i)! = keyword.toLowerCase (). charAt (i)) { System.out.println (

"Chuỗi không bắt đầu bằng"

+

"\" "

+ từ khóa +

"\" "

);

return

false

; }

else

if

(i == keyword.length () -

1

) { System.out.println (

"Chuỗi bắt đầu bằng"

+

"\" "

+ từ khóa +

"\" "

);

return

true

; } }

return

false

; }

Hãy thử nghiệm phương pháp này:

  String string = 

"Chỉ là một chuỗi mẫu"

; System.out.println (startedWithSubstring (string,

"just"

)); System.out.println (startedWithSubstring (string,

"String"

)); System.out.println (startedWithSubstring (string,

"something else"

));

Điều này dẫn đến:

  Chuỗi bắt đầu bằng "just"
thật
Chuỗi không bắt đầu bằng "Chuỗi"
sai
Chuỗi không bắt đầu bằng "cái gì đó khác"
sai
 

Theo mặc định, nếu chúng tôi không sử dụng toLowerCase () để phân biệt các chữ cái trong chính phương thức, thì phương pháp này sẽ phân biệt chữ hoa chữ thường.

Apache Commons

Thư viện Apache Commons cung cấp chức năng mở rộng trên Khung Java cốt lõi. Đây là một trong những thư viện của bên thứ ba hàng đầu và có mặt trong nhiều dự án Java hiện đại.

Apache Commons cung cấp lớp StringUtils , chứa nhiều phương thức được sử dụng để thao tác chuỗi. Hầu hết các phương pháp này khá giống với các phương thức được tìm thấy trong java.lang.String . Sự khác biệt chính là tất cả các phương thức trong lớp StringUtils null-safe .

Tuy nhiên, đối với tác vụ này, chúng tôi sẽ chỉ cần một số phương thức từ lớp này:

  1. .indexOf ()
  2. .startsWith ()
  3. .startsWithIgnoreCase () .

Nếu chưa có, hãy bao gồm thư viện Apache Commons trong dự án của bạn bằng cách thêm phần phụ thuộc vào tệp pom.xml nếu bạn đang sử dụng Maven:

  

& lt;

phụ thuộc

& gt;

& lt;

groupId

& gt;

org.apache.commons

& lt; /

groupId

& gt;

& lt;

craftId

& gt;

commons-lang3

& lt; / < p class = "hljs-name"> tạo tác

& gt;

& lt;

version

& gt;

3.11

& lt; /

phiên bản

& gt;

& lt; /

phụ thuộc

& gt;

Hoặc bằng cách thêm nó vào Gradle:

  

biên dịch

nhóm

:

'org.apache.commons'

, tên:

'commons-lang3'

, phiên bản:

'3.11 '

StringUtils.indexOf ()

Phương thức này có một vài biến thể được nạp chồng, tất cả đều trả về giá trị int cho biết chỉ số của lần xuất hiện đầu tiên của chuỗi con hoặc -1 nếu chuỗi con không ' hoàn toàn không xuất hiện.

Sách điện tử miễn phí: Git Essentials

Kiểm tra đưa ra hướng dẫn thực hành, thực tế của chúng tôi để học Git, với các phương pháp hay nhất, các tiêu chuẩn được ngành công nghiệp chấp nhận và bảng lừa đảo đi kèm. Hãy dừng các lệnh của Google Git và thực sự học nó!

Chúng tôi sẽ tập trung vào biến thể sau của điều này phương pháp:

  

public

static

int

indexOf

(CharSequence seq, CharSequence searchSeq)

Phương thức này cần hai String s / CharSequence s.

Tham số seq đại diện cho Chuỗi mà chúng tôi sẽ tìm kiếm để tìm searchSeq . Áp dụng cùng một logic như trước - nếu hàm này trả về 0 , chúng ta sẽ biết rằng chuỗi của chúng ta bắt đầu bằng một chuỗi con searchSeq nhất định.

Cũng xin lưu ý rằng phương thức này, giống như phương thức đối ứng của nó, cũng phân biệt chữ hoa chữ thường, vì vậy bạn cần sử dụng .toLowerCase () hoặc .toUpperCase () để đạt được một hành vi không phân biệt chữ hoa chữ thường.

Sử dụng phương pháp này rất giống với sử dụng indexOf () từ java.lang.String :

  String string = 

"một chuỗi đơn giản để tìm kiếm trong"

; System.out.println (StringUtils.indexOf (string.toLowerCase (),

"a simple"

.toLowerCase ())); System.out.println (StringUtils.indexOf (string.toLowerCase (),

"string"

.toLowerCase ())); System.out.println (StringUtils.indexOf (string.toLowerCase (),

"something"

.toLowerCase ()));

Điều này sẽ mang lại:

  0
9
-1
 

Và do đó, chúng tôi có thể sử dụng điều này như một phương pháp tiện lợi:

  

public

static

boolean

startedWithSubstring

(Chuỗi văn bản, Từ khóa chuỗi)

{

return

StringUtils.indexOf (text.toLowerCase (), keyword.toLowerCase ()) ==

0

; }

StringUtils.startsWith ()

Phương pháp này thực hiện chính xác những gì bạn mong đợi. Nó cũng phân biệt chữ hoa chữ thường giống như các phiên bản tiền nhiệm và chấp nhận hai tham số giống nhau.

Nó trả về true nếu text bắt đầu bằng keyword hoặc false nếu không.

So sánh hai giá trị null sẽ dẫn đến true :

  String string = 

"một chuỗi đơn giản để tìm kiếm trong"

; System.out.println (StringUtils.startsWith (string.toLowerCase (),

"ĐƠN GIẢN"

)); System.out.println (StringUtils.startsWith (string.toLowerCase (),

"ĐƠN GIẢN"

.toLowerCase ())); System.out.println (StringUtils.startsWith (

null

,

null

));

Chạy nó sẽ xuất ra:

  false
thật
thật

StringUtils.startsWithAny ()

startedWithAny () không có bản sao trong lớp java.lang.String và là duy nhất đối với StringUtils . < / p>

Tuy nhiên, nó rất gần với những gì chúng tôi đã làm với anyMatch () trên Luồng - Nó kiểm tra xem Chuỗi có bắt đầu bằng bất kỳ chuỗi con nào hay không, trả về < code> true hoặc false một cách thích hợp.

Nó cũng phân biệt chữ hoa chữ thường:

  String string = 

"một chuỗi đơn giản để tìm kiếm trong" ; System.out.println (StringUtils.startsWithAny (string,

"something"

,

"a simple"

)) ; System.out.println (StringUtils.startsWithAny (string,

"something"

,

"string"

)); System.out.println (StringUtils.startsWithAny (string,

"something"

,

null

)); System.out.println (StringUtils.startsWithAny (string,

"something"

,

""

));

Chạy điều này mang lại cho chúng tôi:

  true
sai
sai
thật
 

StringUtils.startsWithIgnoreCase ()

Vì việc gọi toLowerCase () trên Chuỗi trong khi so sánh có thể gây khó chịu, bạn có thể khởi kiện phương thức startedWithIgnoreCase () một cách khác.

Giống như phương thức startedWith () từ cùng một lớp, nó có hai loại Chuỗi (hoặc CharSequence ) và giá trị trả về là true hoặc false tùy thuộc vào việc văn bản có thực sự bắt đầu bằng từ khóa được cung cấp hay không:

  String string = 

"một chuỗi đơn giản để tìm kiếm trong"

; System.out.println (StringUtils.startsWithIgnoreCase (string,

"something"

)); System.out.println (StringUtils.startsWithIgnoreCase (string,

"A SIMPLE"

)); System.out.println (StringUtils.startsWithIgnoreCase (string,

""

)); System.out.println (StringUtils.startsWithIgnoreCase (string,

null

));

Chạy kết quả đầu ra này:

  false
thật
thật
sai
 

Kết luận

Trong bài viết này, chúng ta đã xem xét tất cả các phương pháp khác nhau để kiểm tra xem một String có bắt đầu bằng một String khác hay không, cả trong Java lõi và sử dụng thư viện Apache Commons .

Tóm lại, có nhiều cách khác nhau để hoàn thành nhiệm vụ này. Trên thực tế, chúng tôi có thể kết hợp bất kỳ phương pháp nào ở trên để tìm chỉ mục mà một chuỗi con bắt đầu và từ đó kiểm tra xem chuỗi con được đặt ở đâu.

Trong hầu hết thời gian, chỉ cần sử dụng các phương thức startedWith () hoặc startedWithIgnoreCase () là đủ để giải quyết vấn đề này và cũng sẽ cung cấp mã ngắn nhất, rõ ràng nhất .


Xem thêm những thông tin liên quan đến chủ đề kiểm tra xem chuỗi có bắt đầu bằng java không

Chuẩn hoá chuỗi viết hoa ký tự đầu trong Java

  • Tác giả: vnitt
  • Ngày đăng: 2012-10-07
  • Đánh giá: 4 ⭐ ( 3648 lượt đánh giá )
  • Khớp với kết quả tìm kiếm: Hướng dẫn chuẩn hoá chuỗi trong java
    Thủ thuật SEO - Kỹ thuật lập trình tại http://vnitt.net

Hàm indexOf() trong JavaScript

  • Tác giả: hocjavascript.net
  • Đánh giá: 3 ⭐ ( 8192 lượt đánh giá )
  • Khớp với kết quả tìm kiếm: Hàm indexOf() trong JavaScript trả về vị trí của một phần tử trong mảng hoặc chuỗi. Nếu phần tử đó xuất hiện nhiều lần, hàm indexOf() sẽ trả về

Java: Hàm xử lý chuỗi (String)

  • Tác giả: v1study.com
  • Đánh giá: 4 ⭐ ( 4646 lượt đánh giá )
  • Khớp với kết quả tìm kiếm: Lớp String cung cấp khá nhiều hàm (hay phương thức) dùng cho việc thao tác chuỗi (hay xâu ký tự). Ta cần lưu ý rằng một biến chuỗi hay một hằng chuỗi thì

Phương thức startsWith() trong Java String

  • Tác giả: freetuts.net
  • Đánh giá: 3 ⭐ ( 3554 lượt đánh giá )
  • Khớp với kết quả tìm kiếm: Cách dùng hàm startsWith() trong Java String. Đây là một phương thức được sử dụng để kiểm tra xem một chuỗi có bắt đầu bằng một chuỗi được chỉ định.

Java 101: Kiểm tra xem một chuỗi trống hay trống

  • Tác giả: helpex.vn
  • Đánh giá: 5 ⭐ ( 8132 lượt đánh giá )
  • Khớp với kết quả tìm kiếm: Trong Java, một chuỗi trống và một chuỗi trống là hai khái niệm khác nhau. Luôn luôn khó hiểu và phức tạp đối với người mới bắt đầu Java khi kiểm tra xem một Chuỗi là cả hai, trống hay…

Kiểm tra xem ký tự đầu tiên của chuỗi có phải là chữ hoa

  • Tác giả: hiepsiit.net
  • Đánh giá: 3 ⭐ ( 9290 lượt đánh giá )
  • Khớp với kết quả tìm kiếm:

Java Bài 9.6: Kiểm tra chuỗi có bắt đầu bằng khoảng trắng

  • Tác giả: daotaobanhang.edu.vn
  • Đánh giá: 5 ⭐ ( 7944 lượt đánh giá )
  • Khớp với kết quả tìm kiếm:

Xem thêm các bài viết khác thuộc chuyên mục: Kiến thức lập trình

Xem Thêm  Sơ lược về SQL MOD () với các ví dụ - toán tử mod trong sql

By ads_php