- 方法
- 產生隨機字串
- 字串比較:
equals()
或==
?
該類別是
String
程式設計師經常使用的,所以應該學好。
請記住,類別物件
String
是不可變的。因此,當您認為正在更改字串時,實際上是在建立一個新字串。Java 有特殊的類
StringBuffer
,
StringBuilder
允許更改字串。類別
String
、
StringBuffer
、
StringBuilder
是在
java.lang套件中定義的,無需導入聲明即可自動使用。所有三個類別都實作該介面
CharSequence
。建立字串非常簡單。例如,您可以這樣做:
String aboutCat = "Кот - это звучит гордо, а если наступить на хвост, то громко";
您可以建立一個字串陣列:
String[] cats = {"Васька", "Barsik", "Murzik"};
您可以建立一個空的類別物件
String
:
String str = new String();
您可以透過字元數組建立字串:
char[] chars = { 'c', 'a', 't' };
String str = new String(chars);
還有一個建構函數可讓您設定字元數組的範圍。您需要指定範圍的開頭和要使用的字元數:
char[] chars = {'c', 'a', 't', 'a', 'm', 'a', 'r', 'a', 'n' };
String str = new String(chars, 0, 3);
您可以使用以下建構函式
String
從類別物件 建立類別物件:
StringBuffer
StringBuilder
String(StringBuffer an object_StrBuf)
String(StringBuilder an object_StrBuild)
運算符+
和+=String
在Java中,加號(
+
)表示字串連接,即組合字串。
String cat = "Кот";
String name = "Васька";
String fullname = cat + " " + name;
如果表達式中的運算元之一包含字串,則其他運算元也必須是字串。因此,Java 本身可以將變數轉換為字串表示形式,即使它們不是字串。
int digit = 4;
String paws = " лапы";
String aboutcat = digit + paws;
За кулисами Java за нас преобразовало число 4 в строку "4"
格式化字串
假設我們有一個字串資源:
<string name="aboutcat">У кота по имени Барсик четыре лапы, один хвост. Ему 5 лет</string>
要以程式設計方式在 element 中顯示此字串
TextView
,您可以使用以下程式碼:
TextView tvCatsInfo = (TextView)findViewById(R.id.textView1);
tvCatsInfo.setText(R.string.aboutcat);
想像一下你有幾隻貓。當然,您可以為每隻貓擁有自己的線路。但台詞非常相似,只是名字和年齡改變了。您也可以更改爪子和尾巴的數量(您在吸什麼?)。在這種情況下,您可以套用字串格式。我們需要確定要更改的單詞,並將它們替換為一組特殊的字符,這些字符以百分號開頭,然後是遞增一的數字,然後是
$s
字串或
$d
數字。因此,讓我們像這樣更改字串資源:
<string name="aboutcat">У кота по имени %1$s %2$s лапы, %3$s хвост. Ему %4$d лет</string>
我們來修改一下程式碼:
String strBarsik = "Barsik";
String strPaws = "четыре";
String strTail = "one";
int year = 5;
String strCats = getResources().getString(R.string.aboutcat);
String strFinal = String.format(strCats, strBarsik, strPaws, strTail, year);
tvCatsInfo.setText(strFinal);
如果您有一隻貓 Vaska 並且它已經六歲了,那麼請添加兩個變數並格式化該行
String strVaska = "Васька";
year = 6;
String strFinal = String.format(strCats, strVaska, strPaws, strTail, year);
tvCatsInfo.setText(strFinal);
這是一個簡單的格式化範例。記住它並在正確的地方使用它。
字串資源
建議將字串儲存在資源中。以程式設計方式存取字串資源是這樣完成的:
String catName = getResources().getString(R.string.barsik);
從資源中的字串數組中提取字串
假設您在名為 的
strings.xmlcats_array
檔案中定義了一個字串陣列。然後您可以像這樣存取資源中的行:
Resources res = getResources();
String[] cats = res.getStringArray(R.array.cats_array);
方法
public char charAt (int index)
傳回此字串中指定偏移處的字元。倒數計時從0開始。沒有必要使用負值和不存在的值,嚴肅一點。若要提取多個字符,請使用
getChars()
.
String testString = "Котёнок";
char myChar = testString.charAt(2);
tv.setText(Character.toString(myChar));
public int codePointAt(int index)
傳回給定索引處的 Unicode 字符
String testString = "Котёнок";
int myChar = testString.codePointAt(3);
tv.setText(String.valueOf(myChar));
public int codePointBefore(int index)
傳回給定索引之前的 Unicode 字符
String testString = "Котёнок";
int myChar = testString.codePointBefore(4);
tv.setText(String.valueOf(myChar));
public int codePointCount(int start, int end)
start
計算位置和 之間的 Unicode 字元數
end
String testString = "Котёнок";
int myChar = testString.codePointCount(0, 3);
tv.setText(String.valueOf(myChar));
public int compareTo(String string)
使用 Unicode 字元值比較指定字串,並計算哪個字串小於、等於或大於下一個字串。可用於排序。考慮案例。如果字串匹配,則傳回 0,如果小於零,則呼叫字串小於 string
string
,如果大於零,則呼叫字串大於 string
string
。大寫單字位於小寫單字上方。
String testString = "Котёнок";
if (testString.compareTo("котёнок") == 0) {
tvInfo.setText("Строки равны");
} else {
tvInfo.setText("Строки не равны. Возвращено"
+ testString.compareTo("котёнок"));
}
讓我們使用冒泡排序對字串陣列進行排序。
String[] poem = { "Мы", "везём", "с", "собой", "кота" };
for (int j = 0; j < poem.length; j++) {
for (int i = j + 1; i < poem.length; i++) {
if (poem[i].compareTo(poem[j]) < 0) {
String temp = poem[j];
poem[j] = poem[i];
poem[i] = temp;
}
}
System.out.println(poem[j]);
}
結果我們得到:
Мы
везём
кота
с
собой
正如您所看到的,
更改術語的位置不會改變貓的排序總和。
public int compareToIgnoreCase (String string)
使用 Unicode 字元值比較指定的字串,不區分大小寫。
String testString = "Котёнок";
if (testString.compareToIgnoreCase("котёнок") == 0) {
tv.setText("Строки равны");
} else {
tv.setText("Строки не равны. Возвращено"
+ testString.compareTo("котёнок"));
}
public String concat (String string)
將字串與指定字串連接。傳回一個新字串,其中包含兩個字串的串聯。請注意,方法名稱本身包含一隻貓!
String testString = "Сук";
String newString = testString.concat("кот");
tv.setText(newString);
該方法執行與運算符相同的功能
+
,並且可以編寫為
Сук + кот
。但真正的貓人會使用「貓」的方法。
public boolean contains (CharSequence cs)
確定字串中是否包含字元序列
CharSequence
String testString = "котёнок";
if(testString.contains("кот")){
infoTextView.setText("В слове котёнок содержится слово кот!");
}
public static String copyValueOf (char[] data, int start, int length)
建立一個新字串,其中包含數組中從
長度Data
為 length 的位置
start
(從零開始編號)開始的指定字元。 建立一個包含指定數組中的字元的新字串。建立行後更改數組不會更改創建的行。 檢查字串是否以 結尾。
public static String copyValueOf(char[] data)
public boolean endsWith(String suffix)
suffix
String str1 = "Суккот";
if(str1.endsWith("кот"))
infoTextView.setText("Слово заканчивается на котике");
else
infoTextView.setText("Плохое слово. Нет смысла его использовать");
public boolean equals (Object string)
比較指定的物件和字串,如果比較的字串相等則傳回
true ,即 包含相同的字元並且區分大小寫的順序相同。
String str1 = "Кот";
String str2 = "Кошка";
if(str1.equals(str2))
infoTextView.setText("Строки совпадают");
else
infoTextView.setText("Строки не совпадают");
不要將該方法與運算符混淆
==
,後者比較兩個物件引用並確定它們是否引用同一個實例。請參閱字串比較:
equals()
或
==
?
public boolean equalsIgnoreCase(String string)
以不區分大小寫的方式將指定字串與來源字串進行比較,如果相等則傳回
true 。AZ 範圍被認為等於 az 範圍。
String str1 = "Кот";
String str2 = "кот";
if(str1.equalsIgnoreCase(str2))
infoTextView.setText("Строки совпадают");
else
infoTextView.setText("Строки не совпадают");
public static String format(Locale locale, String format, Object... args)
使用提供的格式和本地化到給定範圍的參數傳回格式化字串。例如日期或時間
String.format("%.2f", floatValue);
我們將出現在新行上的兩個單字黏合起來。在這種情況下,第二個單字以大寫形式顯示。
String str1 = "Кот";
String str2 = "васька";
String strResult = String.format("%s\n%S", str1, str2);
infoTextView.setText(strResult);
將數字轉換為八進制。
String str1 = "8";
int inInt = Integer.parseInt(str1);
String strResult = String.format("(Восьмеричное meaning): %o\n", inInt);
infoTextView.setText(strResult);
以此類推,我們以十六進位顯示
String str1 = "255";
int inInt = Integer.parseInt(str1);
String strResult = String.format("(Шестнадцатеричное meaning): %x\n", inInt);
infoTextView.setText(strResult);
對於大寫使用
%X
,那麼
ff
就可以了
FF
。供十進制使用
%d
。日期也可以以不同的方式顯示。
Date now = new Date();
Locale locale = Locale.getDefault();
infoTextView.setText(
String.format(locale, "%tD\n", now) +
String.format(locale, "%tF\n", now) +
String.format(locale, "%tr\n", now) +
String.format(locale, "%tz\n", now) +
String.format(locale, "%tZ\n", now));
public byte[] getBytes(String charsetName)
使用提供的格式傳回格式化字串。
public void getBytes(int start, int end, byte[] data, int index)
和其他重載 該方法將字元儲存到位元組數組中,這是
getChars()
. 通常在從使用其他 Unicode 字元的各種來源匯出字串時使用。例如,Java預設使用16位元Unicode字符,而在網路上,字串經常使用8位元Unicode、ASCII等
public void getChars(int start, int end, char[] buffer, int index)
從字串中提取多個字元的方法。您需要指定子字串開頭的索引 (
start
)、要提取的子字串末尾後面的字元的索引 ( end )。接收所選字元的陣列位於
buffer參數中。數組中的索引(從其開始寫入子字串)在
索引參數中傳遞。確保陣列足夠大以包含指定子字串中的所有字元。
String unusualCat = "Котёнок по имени Гав";
int start = 5;
int end = 12;
char[] buf = new char[end - start];
unusualCat.getChars(start, end, buf, 0);
infoTextView.setText(new String(buf));
public int hashCode()
傳回一個整數,該整數是該物件的雜湊碼。
public int indexOf(int c)
傳回第一個遇到的具有指定索引 c 的位置的編號。
String testString = "котёнок";
infoTextView.setText(String.valueOf(testString.indexOf("ё")));
public int indexOf (int c, int start)
從位置開始尋找索引
start
String testString = "котёнок";
infoTextView.setText(String.valueOf(testString.indexOf("ё", 4)));
public int indexOf (String string)
搜尋一串字符
subString
String testString = "У окошка";
infoTextView.setText(String.valueOf(testString.indexOf("кошка")));
public int indexOf (String subString, int start)
subString
搜尋從位置開始的 字串
start
String testString = "У окошка";
infoTextView.setText(String.valueOf(testString.indexOf("кошка", 2)));
public String intern ()
“哈希”字串
public boolean isEmpty ()
檢查字串是否為空
if(catname.isEmpty()) {
}
此方法出現在API 9(Android 2.1)。對於較舊的設備,請使用
String.length() == 0
public int lastIndexOf (String string) и другие перегруженные версии
傳回指定索引處最後遇到的位置的編號。例如,您可以獲得不含副檔名的檔案名,如下所示:
filename.toString().substring(0, filename.getString().lastIndexOf("."));
在此範例中,我們取得最後一個點的位置並取得它之前的子字串。
public int length()
傳回字串的長度
String testString = "котёнок";
infoTextView.setText(String.valueOf(testString.length()));
public boolean matches(String regularExpression)
檢查字串是否與正規表示式相符。
public int offsetByCodePoints (int index, int codePointOffset)
codePointOffset
傳回距離參數指定的起始位置 一定距離的位置。
index
public boolean regionMatches (int thisStart, String string, int start, int length)
此方法將字串的指定部分與字串的另一部分進行比較。您必須指定類別的呼叫物件的行範圍的開頭索引
String
。要比較的字串在參數中傳遞
string
。參數中傳入需要進行比較的字元的索引
start
,參數中傳入要比較的子字串的長度
length
。
public boolean regionMatches (boolean ignoreCase, int thisStart, String string, int start, int length)
重載版本。此方法將字串的指定部分與字串的另一部分進行比較,忽略大小寫。
public String replace(CharSequence target, CharSequence replacement) и другие перегруженные версии
將一個字元或字元序列變更
target
為
replacement
String testString = "whale";
infoTextView.setText(testString.replace("And", "о"));
public String replaceAll (String regularExpression, String replacement)
public String replaceFirst (String regularExpression, String replacement)
使用正規表示式刪除第一個字元。例如,如果您需要刪除數字 001、007、000024 開頭的零,則可以使用此呼叫。
String s = "001234-cat";
String s = s.replaceFirst ("^0*", "");
public String[] split (String regularExpression) и другие перегруженные версии
將字串拆分為單字數組。例如,有一個字串 Vaska Ryzhik Murzik Barsik,我們想要取得貓名字的陣列:
String catnames = "Васька Рыжик Мурзик Барсик";
String aCats[] = catnames.split(" ");
我們得到:
aCats[0] = Васька
aCats[1] = Рыжик
aCats[2] = Мурзик
aCats[3] = Барсик
public boolean startsWith(String prefix)
檢查字串是否以字串開頭
prefix
的 字元開頭
String str1 = "котлета";
if(str1.startsWith("кот"))
infoTextView.setText("Слово содержит кота");
else
infoTextView.setText("Плохое слово. Нет смысла его использовать");
public boolean startsWith(String prefix, int start)
檢查給定字串是否
prefix
以指定位置的字元開頭。
String str1 = "Суккот";
if(str1.startsWith("кот", 3))
infoTextView.setText("Слово содержит кота");
else
infoTextView.setText("Плохое слово. Нет смысла его использовать");
public CharSequence subSequence (int start, int end)
方法類似
substring()
,但可以用於
CharSequence
。
public String substring(int start)
和其他重載 建立一個新的序列/字串,其中包含給定字串中從 位置 開始到
start
行尾/以位置 處的字元結尾的字元
end
。新行包含從
start
到結束的字元 - 1,因此我們再取一個字元。
String testString = "скотина";
infoTextView.setText(testString.substring(1, 4));
public char[] toCharArray()
將此字串中的字元複製到字元數組。透過 可以得到同樣的結果
getChars()
。文件不建議使用此方法,建議使用
charAt()
.
String unusualCat = "Котёнок по имени Гав";
char[] yomoe = unusualCat.toCharArray();
infoTextView.setText(String.valueOf(yomoe[3]));
public String toLowerCase() и другие перегруженные версии
將字串轉換為小寫。預設區域設定控制轉換。字符串貓=“貓”;字串 lower = cat.toLowerCase(); infoTextView.setText(下);
public String toString ()
傳回一個字串。對於字串本身來說,它本身已經是一個字串,返回字串是沒有意義的(哦,我是如何彎曲它的)。但這個方法其實對於其他類別來說非常有用。
public String toUpperCase()
將字串轉換為大寫。預設區域設定控制轉換。
String cat = "Кот";
String upper = cat.toUpperCase();
infoTextView.setText(upper);
public String trim()
刪除字串開頭和結尾的空格。
String str = " Hello Kitty ".trim();
infoTextView.setText(str);
public static String valueOf(long value)
和其他重載 將內容(數字、物件、字元、字元陣列)轉換為字串。
int catAge = 7;
infoTextView.setText(String.valueOf(catAge));
產生隨機字串
假設我們需要給定字元的隨機字串。
private static final String mCHAR = "ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890";
private static final int STR_LENGTH = 9;
Random random = new Random();
public void onClick(View view) {
TextView infoTextView = (TextView) findViewById(R.id.textViewInfo);
infoTextView.setText(createRandomString());
}
public String createRandomString() {
StringBuilder builder = new StringBuilder();
for (int i = 0; i < STR_LENGTH; i++) {
int number = random.nextInt(mCHAR.length());
char ch = mCHAR.charAt(number);
builder.append(ch);
}
return builder.toString();
}
字串比較:equals()
或==
?
讓我們來看一個例子。
String str1 = "Murzik";
String str2 = new String(str1);
boolean isCat = str1 == str2;
infoTextView.setText(str1 + " == " + str2 + " -> " + isCat);
儘管這兩個變數包含相同的單字,但我們正在處理兩個不同的對象,並且運算子
==
將返回
false。有一次,當樹很大時,我需要比較來自不同來源的兩個字串。儘管字串看起來完全相同,但使用運算符的比較
==
返回
false並混淆了所有卡片。然後我才發現我需要使用
equals()
. Java 中的字串是一個單獨的對象,儘管字串的輸出在螢幕上看起來可能相同,但它可能與另一個對像不同。只是 Java 在邏輯運算子
==
(以及
!=
)的情況下比較物件的參考(使用基元時不存在這樣的問題):
String s1 = "hello";
String s2 = "hello";
String s3 = s1;
String s4 = "h" + "e" + "l" + "l" + "o";
String s5 = new String("hello");
String s6 = new String(new char[]{'h', 'e', 'l', 'l', 'o'});
infoTextView.setText(s1 + " == " + s2 + ": " + (s1 == s2));
GO TO FULL VERSION