Scala - Chuỗi
Chương này sẽ đưa bạn qua các Chuỗi Scala. Trong Scala, cũng như trong Java, một chuỗi là một đối tượng bất biến, nghĩa là một đối tượng không thể sửa đổi. Mặt khác, các đối tượng có thể được sửa đổi, như mảng, được gọi là các đối tượng có thể thay đổi. Chuỗi là các đối tượng rất hữu ích, trong phần còn lại của phần này, chúng tôi trình bày các phương thức quan trọng củajava.lang.String lớp học.
Tạo một chuỗi
Đoạn mã sau có thể được sử dụng để tạo một Chuỗi:
var greeting = "Hello world!";
or
var greeting:String = "Hello world!";
Bất cứ khi nào trình biên dịch gặp một chuỗi ký tự trong mã, nó sẽ tạo một đối tượng Chuỗi với giá trị của nó, trong trường hợp này là “Hello world!”. Từ khóa chuỗi cũng có thể được đưa ra trong khai báo thay thế như hình trên.
Hãy thử chương trình ví dụ sau.
Thí dụ
object Demo {
val greeting: String = "Hello, world!"
def main(args: Array[String]) {
println( greeting )
}
}
Lưu chương trình trên vào Demo.scala. Các lệnh sau được sử dụng để biên dịch và thực thi chương trình này.
Chỉ huy
\>scalac Demo.scala
\>scala Demo
Đầu ra
Hello, world!
Như đã đề cập trước đó, lớp String là bất biến. Đối tượng chuỗi sau khi được tạo không thể thay đổi. Nếu cần thiết phải thực hiện nhiều sửa đổi đối với Chuỗi ký tự, hãy sử dụng Lớp trình tạo chuỗi có sẵn trong Scala !.
Chiều dài chuỗi
Các phương thức được sử dụng để lấy thông tin về một đối tượng được gọi là phương thức truy cập. Một phương thức truy cập có thể được sử dụng với chuỗi là phương thức length (), trả về số ký tự có trong đối tượng chuỗi.
Sử dụng đoạn mã sau để tìm độ dài của một chuỗi:
Thí dụ
object Demo {
def main(args: Array[String]) {
var palindrome = "Dot saw I was Tod";
var len = palindrome.length();
println( "String Length is : " + len );
}
}
Lưu chương trình trên vào Demo.scala. Các lệnh sau được sử dụng để biên dịch và thực thi chương trình này.
Chỉ huy
\>scalac Demo.scala
\>scala Demo
Đầu ra
String Length is : 17
Nối các chuỗi
Lớp String bao gồm một phương thức để nối hai chuỗi:
string1.concat(string2);
Điều này trả về một chuỗi mới là string1 với string2 được thêm vào ở cuối. Bạn cũng có thể sử dụng phương thức concat () với chuỗi ký tự, như trong -
"My name is ".concat("Zara");
Các chuỗi thường được nối với toán tử +, như trong -
"Hello," + " world" + "!"
Kết quả là -
"Hello, world!"
Các dòng mã sau để tìm độ dài chuỗi.
Thí dụ
object Demo {
def main(args: Array[String]) {
var str1 = "Dot saw I was ";
var str2 = "Tod";
println("Dot " + str1 + str2);
}
}
Lưu chương trình trên vào Demo.scala. Các lệnh sau được sử dụng để biên dịch và thực thi chương trình này.
Chỉ huy
\>scalac Demo.scala
\>scala Demo
Đầu ra
Dot Dot saw I was Tod
Tạo chuỗi định dạng
Bạn có các phương thức printf () và format () để in đầu ra với các số được định dạng. Lớp String có một phương thức lớp tương đương, format (), trả về một đối tượng String chứ không phải là một đối tượng PrintStream.
Hãy thử chương trình ví dụ sau, sử dụng phương thức printf () -
Thí dụ
object Demo {
def main(args: Array[String]) {
var floatVar = 12.456
var intVar = 2000
var stringVar = "Hello, Scala!"
var fs = printf("The value of the float variable is " + "%f, while the value of the integer " + "variable is %d, and the string" + "is %s", floatVar, intVar, stringVar);
println(fs)
}
}
Lưu chương trình trên vào Demo.scala. Các lệnh sau được sử dụng để biên dịch và thực thi chương trình này.
chỉ huy
\>scalac Demo.scala
\>scala Demo
Đầu ra
The value of the float variable is 12.456000,
while the value of the integer variable is 2000,
and the string is Hello, Scala!()
Nội suy chuỗi
Nội suy chuỗi là cách mới để tạo chuỗi trong ngôn ngữ lập trình Scala. Tính năng này hỗ trợ các phiên bản Scala-2.10 trở lên. Nội suy chuỗi: Cơ chế nhúng các tham chiếu biến trực tiếp vào chuỗi quy trình.
Có ba loại (bộ nội suy) triển khai trong Nội suy chuỗi.
Bộ nội suy chuỗi 's'
Chữ 's' cho phép sử dụng trực tiếp biến trong quá trình xử lý một chuỗi, khi bạn thêm 's' vào nó. Bất kỳ biến Chuỗi nào với trong phạm vi có thể được sử dụng với trong Chuỗi. Sau đây là các cách sử dụng khác nhau của bộ nội suy chuỗi 's'.
Đoạn mã ví dụ sau về việc triển khai bộ nội suy 's' trong việc nối biến Chuỗi ($ name) vào một Chuỗi bình thường (Hello) trong câu lệnh println.
val name = “James”
println(s “Hello, $name”) //output: Hello, James
Bộ nội suy chuỗi cũng có thể xử lý các biểu thức tùy ý. Đoạn mã sau để Xử lý một chuỗi (1 + 1) với biểu thức tùy ý ($ {1 + 1}) bằng cách sử dụng bộ nội suy Chuỗi của 's'. Bất kỳ biểu thức tùy ý nào cũng có thể được nhúng vào '$ {}'.
println(s “1 + 1 = ${1 + 1}”) //output: 1 + 1 = 2
Hãy thử chương trình ví dụ sau về triển khai bộ nội suy 's'.
Thí dụ
object Demo {
def main(args: Array[String]) {
val name = "James"
println(s"Hello, $name")
println(s"1 + 1 = ${1 + 1}")
}
}
Lưu chương trình trên vào Demo.scala. Các lệnh sau được sử dụng để biên dịch và thực thi chương trình này.
Chỉ huy
\>scalac Demo.scala
\>scala Demo
Đầu ra
Hello, James
1 + 1 = 2
Bộ nội suy 'f'
Bộ nội suy 'f' theo nghĩa đen cho phép tạo một Chuỗi được định dạng, tương tự như printf trong ngôn ngữ C. Trong khi sử dụng bộ nội suy 'f', tất cả các tham chiếu biến phải được theo sau bởiprintf các chỉ định định dạng kiểu như% d,% i,% f, v.v.
Chúng ta hãy lấy một ví dụ về nối giá trị dấu phẩy động (chiều cao = 1,9d) và biến chuỗi (tên = “James”) với chuỗi bình thường. Đoạn mã sau về việc triển khai Bộ nội suy 'f'. Ở đây $ name% s để in (Biến chuỗi) James và $ height% 2.2f để in (giá trị dấu phẩy động) 1.90.
val height = 1.9d
val name = "James"
println(f"$name%s is $height%2.2f meters tall") //James is 1.90 meters tall
Đây là kiểu an toàn (tức là) tham chiếu biến và mã định dạng sau phải khớp nếu không nó đang hiển thị lỗi. Bộ nội suy 'f' sử dụng các tiện ích định dạng chuỗi (mã định dạng) có sẵn trong Java. Theo mặc định, không có ký tự% sau tham chiếu biến. Nó sẽ giả sử là% s (Chuỗi).
Bộ nội suy 'thô'
Bộ nội suy 'thô' tương tự như bộ nội suy 's' ngoại trừ nó không thực hiện thoát các ký tự trong một chuỗi. Các đoạn mã sau trong bảng sẽ khác nhau về cách sử dụng bộ nội suy 's' và 'thô'. Trong đầu ra của hiệu ứng 's' sử dụng '\ n' là dòng mới và ở đầu ra của sử dụng 'thô', '\ n' sẽ không có hiệu lực. Nó sẽ in chuỗi hoàn chỉnh với các chữ cái thoát.
cách sử dụng bộ nội suy của | sử dụng bộ nội suy 'thô' |
---|---|
Program - |
Program - |
Output - |
Output - |
Phương thức chuỗi
Sau đây là danh sách các phương thức được xác định bởi java.lang.String và có thể được sử dụng trực tiếp trong các chương trình Scala của bạn -
Sr.No | Phương pháp với Mô tả |
---|---|
1 | char charAt(int index) Trả về ký tự tại chỉ mục được chỉ định. |
2 | int compareTo(Object o) So sánh chuỗi này với một đối tượng khác. |
3 | int compareTo(String anotherString) So sánh hai chuỗi về mặt từ vựng. |
4 | int compareToIgnoreCase(String str) So sánh hai chuỗi về mặt từ vựng, bỏ qua sự khác biệt về chữ hoa và chữ thường. |
5 | String concat(String str) Nối chuỗi được chỉ định với phần cuối của chuỗi này. |
6 | boolean contentEquals(StringBuffer sb) Trả về true nếu và chỉ khi Chuỗi này đại diện cho cùng một chuỗi ký tự với StringBuffer được chỉ định. |
7 | static String copyValueOf(char[] data) Trả về một Chuỗi đại diện cho chuỗi ký tự trong mảng được chỉ định. |
số 8 | static String copyValueOf(char[] data, int offset, int count) Trả về một Chuỗi đại diện cho chuỗi ký tự trong mảng được chỉ định. |
9 | boolean endsWith(String suffix) Kiểm tra xem chuỗi này có kết thúc bằng hậu tố được chỉ định hay không. |
10 | boolean equals(Object anObject) So sánh chuỗi này với đối tượng được chỉ định. |
11 | boolean equalsIgnoreCase(String anotherString) So sánh Chuỗi này với Chuỗi khác, bỏ qua các cân nhắc về chữ hoa và chữ thường. |
12 | byte getBytes() Mã hóa Chuỗi này thành một chuỗi byte bằng cách sử dụng bộ ký tự mặc định của nền tảng, lưu trữ kết quả vào một mảng byte mới. |
13 | byte[] getBytes(String charsetName) Mã hóa Chuỗi này thành một chuỗi byte bằng cách sử dụng bộ ký tự được đặt tên, lưu trữ kết quả vào một mảng byte mới. |
14 | void getChars(int srcBegin, int srcEnd, char[] dst, int dstBegin) Sao chép các ký tự từ chuỗi này vào mảng ký tự đích. |
15 | int hashCode() Trả về mã băm cho chuỗi này. |
16 | int indexOf(int ch) Trả về chỉ mục trong chuỗi này của lần xuất hiện đầu tiên của ký tự được chỉ định. |
17 | int indexOf(int ch, int fromIndex) Trả về chỉ mục trong chuỗi này của lần xuất hiện đầu tiên của ký tự được chỉ định, bắt đầu tìm kiếm tại chỉ mục được chỉ định. |
18 | int indexOf(String str) Trả về chỉ mục trong chuỗi này của lần xuất hiện đầu tiên của chuỗi con được chỉ định. |
19 | int indexOf(String str, int fromIndex) Trả về chỉ mục trong chuỗi này của lần xuất hiện đầu tiên của chuỗi con được chỉ định, bắt đầu từ chỉ mục được chỉ định. |
20 | String intern() Trả về một biểu diễn chính tắc cho đối tượng chuỗi. |
21 | int lastIndexOf(int ch) Trả về chỉ mục trong chuỗi này về lần xuất hiện cuối cùng của ký tự được chỉ định. |
22 | int lastIndexOf(int ch, int fromIndex) Trả về chỉ mục trong chuỗi này về lần xuất hiện cuối cùng của ký tự được chỉ định, tìm kiếm ngược bắt đầu từ chỉ mục đã chỉ định. |
23 | int lastIndexOf(String str) Trả về chỉ mục trong chuỗi này về lần xuất hiện ngoài cùng bên phải của chuỗi con được chỉ định. |
24 | int lastIndexOf(String str, int fromIndex) Trả về chỉ mục trong chuỗi này về lần xuất hiện cuối cùng của chuỗi con được chỉ định, tìm kiếm ngược lại bắt đầu từ chỉ mục đã chỉ định. |
25 | int length() Trả về độ dài của chuỗi này. |
26 | boolean matches(String regex) Cho biết chuỗi này có khớp với biểu thức chính quy đã cho hay không. |
27 | boolean regionMatches(boolean ignoreCase, int toffset, String other, int offset, int len) Kiểm tra xem hai vùng chuỗi có bằng nhau không. |
28 | boolean regionMatches(int toffset, String other, int offset, int len) Kiểm tra xem hai vùng chuỗi có bằng nhau không. |
29 | String replace(char oldChar, char newChar) Trả về một chuỗi mới do thay thế tất cả các lần xuất hiện của oldChar trong chuỗi này bằng newChar. |
30 | String replaceAll(String regex, String replacement Thay thế từng chuỗi con của chuỗi này khớp với biểu thức chính quy đã cho bằng chuỗi thay thế đã cho. |
31 | String replaceFirst(String regex, String replacement) Thay thế chuỗi con đầu tiên của chuỗi này khớp với biểu thức chính quy đã cho bằng chuỗi thay thế đã cho. |
32 | String[] split(String regex) Tách chuỗi này xung quanh các trận đấu của biểu thức chính quy đã cho. |
33 | String[] split(String regex, int limit) Tách chuỗi này xung quanh các trận đấu của biểu thức chính quy đã cho. |
34 | boolean startsWith(String prefix) Kiểm tra xem chuỗi này có bắt đầu bằng tiền tố được chỉ định hay không. |
35 | boolean startsWith(String prefix, int toffset) Kiểm tra xem chuỗi này có bắt đầu bằng tiền tố được chỉ định bắt đầu một chỉ mục được chỉ định hay không. |
36 | CharSequence subSequence(int beginIndex, int endIndex) Trả về một chuỗi ký tự mới là một chuỗi con của chuỗi này. |
37 | String substring(int beginIndex) Trả về một chuỗi mới là chuỗi con của chuỗi này. |
38 | String substring(int beginIndex, int endIndex) Trả về một chuỗi mới là chuỗi con của chuỗi này. |
39 | char[] toCharArray() Chuyển đổi chuỗi này thành một mảng ký tự mới. |
40 | String toLowerCase() Chuyển đổi tất cả các ký tự trong Chuỗi này thành chữ thường bằng cách sử dụng các quy tắc của ngôn ngữ mặc định. |
41 | String toLowerCase(Locale locale) Chuyển đổi tất cả các ký tự trong Chuỗi này thành chữ thường bằng cách sử dụng các quy tắc của Ngôn ngữ đã cho. |
42 | String toString() Đối tượng này (đã là một chuỗi!) Được trả về chính nó. |
43 | String toUpperCase() Chuyển đổi tất cả các ký tự trong Chuỗi này thành chữ hoa bằng cách sử dụng các quy tắc của ngôn ngữ mặc định. |
44 | String toUpperCase(Locale locale) Chuyển đổi tất cả các ký tự trong Chuỗi này thành chữ hoa bằng cách sử dụng các quy tắc của Ngôn ngữ đã cho. |
45 | String trim() Trả về bản sao của chuỗi, với khoảng trắng đầu và cuối bị bỏ qua. |
46 | static String valueOf(primitive data type x) Trả về biểu diễn chuỗi của đối số kiểu dữ liệu đã truyền. |