Đoạn trích bài giảng với người cố vấn trong khóa học của Đại học Codegym. Đăng ký cho khóa học đầy đủ.
"Xin chào, Amigo! Hôm nay chúng ta sẽ phân tích thêm một số tình huống phổ biến liên quan đến làm việc với chuỗi. Ví dụ, bạn có biết cách chia chuỗi thành nhiều phần không?"
"Tôi sẽ không nói với bạn ngay lập tức, Ellie. Nhưng bạn sẽ nói với tôi, phải không?"
split()
phương pháp
"Có một số cách để thực hiện việc này. Cách đầu tiên để tách một chuỗi thành nhiều phần là sử dụng phương split()
thức. Một biểu thức chính quy xác định một chuỗi phân cách đặc biệt phải được truyền dưới dạng tham số. Bạn sẽ tìm hiểu biểu thức chính quy là gì trong nhiệm vụ Bộ sưu tập Java .
Ví dụ:
Mã số | Kết quả |
---|---|
|
Kết quả sẽ là một mảng gồm ba chuỗi:
|
Đơn giản, nhưng đôi khi cách tiếp cận này là quá mức. Nếu có nhiều dấu phân cách (ví dụ: khoảng trắng, ký tự xuống dòng, tab, dấu chấm), thì bạn phải xây dựng một biểu thức chính quy khá phức tạp."
"Ồ, chắc chắn rồi. Và nếu nó khó đọc, thì sẽ khó thay đổi.
StringTokenizer
lớp học
Đoạn trích bài giảng với người cố vấn trong khóa học của Đại học Codegym. Đăng ký cho khóa học đầy đủ.
"Java có một lớp đặc biệt mà toàn bộ công việc của nó là chia một chuỗi thành các chuỗi con.
"Lớp này không sử dụng biểu thức chính quy: thay vào đó, bạn chỉ cần chuyển vào một chuỗi bao gồm các dấu phân cách. Ưu điểm của phương pháp này là nó không chia toàn bộ chuỗi thành nhiều phần cùng một lúc mà thay vào đó di chuyển từ đầu đến cuối một chuỗi từng bước một.
Lớp này có một hàm tạo và hai phương thức. Chúng tôi chuyển cho hàm tạo một chuỗi mà chúng tôi chia thành các phần và một chuỗi bao gồm một tập hợp các ký tự phân cách.
phương pháp | Sự miêu tả |
---|---|
|
Trả về chuỗi con tiếp theo |
|
Kiểm tra xem có nhiều chuỗi con hơn không. |
"Lớp này bằng cách nào đó làm tôi nhớ đến lớp Máy quét, lớp này cũng có các phương thức nextLine()
và hashNextLine()
.
"Bạn đã quan sát rất tốt. Bạn có thể tạo một StringTokenizer
đối tượng bằng lệnh này:
StringTokenizer name = new StringTokenizer(string, delimiters);
Trong đó chuỗi là chuỗi được chia thành các phần. Và dấu phân cách là một chuỗi và mỗi ký tự trong đó được coi là dấu phân cách. Ví dụ:
Mã số | Đầu ra bảng điều khiển |
---|---|
|
|
"Lưu ý rằng mỗi ký tự trong chuỗi được truyền trong chuỗi thứ hai tới StringTokenizer
hàm tạo được coi là dấu phân cách.
String.format()
phương pháp và StringFormatter
lớp
"Một phương thức thú vị khác của lớp String là format()
.
"Giả sử bạn có nhiều biến lưu trữ dữ liệu. Làm cách nào để hiển thị chúng trên màn hình trong một dòng? Ví dụ: chúng tôi có một số dữ liệu (cột bên trái) và kết quả mong muốn (cột bên phải):
Mã số | Đầu ra bảng điều khiển |
---|---|
|
|
Mã cho một chương trình như vậy sẽ giống như thế này:
Mã chương trình |
---|
|
"Bạn sẽ đồng ý với tôi rằng mã không dễ đọc lắm. Và nếu tên biến dài hơn, thì mã sẽ trở nên khó hơn:
Mã chương trình |
---|
|
"Ừ, khó đọc quá!"
"Đừng lo lắng. Đây là một tình huống phổ biến trong các chương trình trong thế giới thực, vì vậy tôi muốn nói với bạn về một cách để viết mã này đơn giản hơn và ngắn gọn hơn.
String.format
" String
Lớp này có một phương thức tĩnh format()
: nó cho phép bạn chỉ định một mẫu để tập hợp một chuỗi có dữ liệu. Hình thức chung của lệnh như sau:
String name = String.format(pattern, parameters);
Ví dụ:
Mã số | Kết quả |
---|---|
|
|
|
|
|
|
" format()
Tham số đầu tiên của phương thức là một chuỗi định dạng chứa tất cả văn bản mong muốn cùng với các ký tự đặc biệt được gọi là bộ xác định định dạng (chẳng hạn như %d
và %s
) ở những nơi bạn cần chèn dữ liệu.
" format()
Phương thức thay thế các thông số này %s
và %d
định dạng bằng các tham số tuân theo chuỗi định dạng trong danh sách tham số. Nếu chúng ta muốn chèn một chuỗi, thì chúng ta viết . %s
Nếu chúng ta muốn chèn một số, thì thông số định dạng là %d
. Ví dụ:
Mã số | Kết quả |
---|---|
|
s bằng"a=1, b=4, c=3" |
"Đây là một danh sách ngắn các định dạng định dạng có thể được sử dụng bên trong chuỗi định dạng:
công cụ xác định | Nghĩa |
---|---|
|
String |
|
liên lạc: byte , short , int ,long |
|
số thực: float ,double |
|
boolean |
|
char |
|
Date |
|
% tính cách |
"Những bộ xác định này cho biết loại dữ liệu, nhưng cũng có những bộ xác định cho biết thứ tự của dữ liệu. Để nhận một đối số theo số của nó (việc đánh số bắt đầu từ một), bạn cần viết " % 1$ d " thay vì " %d ". Ví dụ:
Mã số | Kết quả |
---|---|
|
s bằng"a=13, b=12, c=11" |
%3$d
sẽ nhận được đối số thứ 3, %2$d
sẽ nhận được đối số thứ hai và %d
sẽ nhận được đối số đầu tiên. Các bộ xác định định dạng %s
và %d
tham chiếu đến các đối số bất kể các bộ xác định như %3$d
hay%2$s
chuỗi hồ bơi
"Mọi chuỗi được chỉ định trong mã dưới dạng chuỗi ký tự được lưu trữ trong một vùng bộ nhớ được gọi là trong StringPool
khi chương trình đang chạy. StringPool
là một mảng đặc biệt để lưu trữ các chuỗi. Mục đích của nó là để tối ưu hóa việc lưu trữ chuỗi:
"Đầu tiên, các chuỗi được chỉ định trong mã phải được lưu trữ ở đâu đó, đúng không? Mã bao gồm các lệnh, nhưng dữ liệu (đặc biệt là các chuỗi lớn) phải được lưu trữ trong bộ nhớ tách biệt với mã. Chỉ các tham chiếu đến các đối tượng chuỗi mới xuất hiện trong mã.
"Thứ hai, tất cả các ký tự chuỗi giống hệt nhau phải được lưu trữ trong bộ nhớ chỉ một lần. Và đó chỉ là cách nó hoạt động. Khi mã lớp của bạn được tải bởi máy Java, tất cả các ký tự chuỗi sẽ được thêm vào nếu chúng chưa có ở đó. Nếu chúng đã StringPool
có đã có, thì chúng ta chỉ cần sử dụng tham chiếu chuỗi từ tệp StringPool
.
Theo đó, nếu bạn gán cùng một chữ cho một số biến Chuỗi trong mã của mình, thì các biến này sẽ chứa cùng một tham chiếu. Một chữ sẽ được thêm vào một StringPool
lần duy nhất. Trong tất cả các trường hợp khác, mã sẽ nhận tham chiếu đến chuỗi đã được tải trong tệp StringPool
.
Đây là cách nó hoạt động:
Mã số | Làm việc với StringPoll |
---|---|
|
|
"Đó là lý do tại sao các biến a
và b
sẽ lưu trữ các tham chiếu giống nhau."
"Tôi hy vọng tôi đã hiểu tất cả một cách chính xác.
intern()
phương pháp.
"Và phần hay nhất là bạn có thể lập trình thêm bất kỳ chuỗi nào vào StringPool
. Để làm điều này, bạn chỉ cần gọi phương thức String
của biến intern()
.
" intern()
Phương thức sẽ thêm chuỗi vào StringPool
nếu nó chưa có ở đó và sẽ trả về một tham chiếu đến chuỗi trong tệp StringPool
.
"Và điều gì sẽ xảy ra nếu hai chuỗi giống hệt nhau được thêm vào phương thức StringPool
sử dụng intern()
?"
"Phương thức này sẽ trả về các tham chiếu giống nhau. Điều này có thể được sử dụng để so sánh các chuỗi theo tham chiếu. Ví dụ:
Mã số | Ghi chú |
---|---|
|
|
|
|
Bạn không có khả năng sử dụng phương pháp này thường xuyên. Điều đó nói rằng, mọi người thích hỏi về nó trong các cuộc phỏng vấn việc làm.
"Vì vậy, biết về nó vẫn tốt hơn là không biết. Cảm ơn, Ellie!"
GO TO FULL VERSION