JavaRush /Java Blog /Random-IT /Classe di stringhe
articles
Livello 15

Classe di stringhe

Pubblicato nel gruppo Random-IT
  • Metodi
  • Generazione di una stringa casuale
  • Confronto tra stringhe: equals()o ==?
La classe viene Stringutilizzata molto spesso dai programmatori, quindi dovrebbe essere appresa molto bene. Stringa di classe - 1Ricorda che gli oggetti della classe Stringsono immutabili. Pertanto, quando pensi di modificare una stringa, in realtà stai creando una nuova stringa. Java ha classi speciali StringBufferche StringBuilderconsentono modifiche a una stringa. Le classi String, StringBuffer, StringBuildersono definite nel pacchetto java.lang e sono disponibili automaticamente senza una dichiarazione di importazione. Tutte e tre le classi implementano l'interfaccia CharSequence. Creare una stringa è molto semplice. Ad esempio, puoi fare questo:
String aboutCat = "Кот - это звучит гордо, а если наступить на хвост, то громко";
Puoi creare un array di stringhe:
String[] cats = {"Васька", "Barsik", "Murzik"};
Puoi creare un oggetto di classe vuoto String:
String str = new String();
Puoi creare una stringa tramite un array di caratteri:
char[] chars = { 'c', 'a', 't' };
String str = new String(chars);
C'è anche un costruttore che ti permette di impostare l'intervallo di un array di caratteri. È necessario specificare l'inizio dell'intervallo e il numero di caratteri da utilizzare:
char[] chars = {'c', 'a', 't', 'a', 'm', 'a', 'r', 'a', 'n' };
String str = new String(chars, 0, 3);
È possibile creare un oggetto classe Stringda un oggetto classi StringBufferutilizzando StringBuilderi seguenti costruttori:
String(StringBuffer an object_StrBuf)
String(StringBuilder an object_StrBuild)

Operatori +e += forString

In Java, il segno più ( +) indica la concatenazione di stringhe, in altre parole, la combinazione di stringhe.
String cat = "Кот";
String name = "Васька";
//складываем две строки и пробел между ними, чтобы слова не слиплись
String fullname = cat + " " + name; // получится Кот Васька
Se uno degli operandi in un'espressione contiene una stringa, anche gli altri operandi devono essere stringhe. Pertanto, Java stesso può eseguire il cast di variabili in una rappresentazione di stringa, anche se non sono stringhe.
int digit = 4;
String paws = " лапы";
String aboutcat = digit + paws; // хотя мы складываем число и строку, но все равно получим строку
За кулисами Java за нас преобразовало число 4 в строку "4"

Stringhe di formattazione

Supponiamo di avere una risorsa stringa:
<string name="aboutcat">У кота по имени Барсик четыре лапы, один хвост. Ему 5 лет</string>
Per visualizzare questa stringa a livello di codice nell'elemento TextView, puoi utilizzare il codice:
TextView tvCatsInfo = (TextView)findViewById(R.id.textView1);
tvCatsInfo.setText(R.string.aboutcat);
Immagina di avere diversi gatti. Ovviamente puoi avere la tua linea per ogni gatto. Ma le linee sono molto simili, cambiano solo i nomi e le età. Puoi anche modificare il numero di zampe e code (cosa stai fumando?). In questi casi, è possibile applicare la formattazione della stringa. Dobbiamo determinare le parole che cambieremo e sostituirle con un set speciale di caratteri che iniziano con un simbolo di percentuale, poi un numero crescente di uno, quindi $sper stringhe o $dper numeri. Quindi cambiamo la nostra risorsa stringa in questo modo:
<string name="aboutcat">У кота по имени %1$s %2$s лапы, %3$s хвост. Ему %4$d лет</string>
Apportiamo delle modifiche al codice:
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);
Se hai un gatto Vaska e ha sei anni, aggiungi due variabili e formatta la riga
String strVaska = "Васька";
year = 6;
String strFinal = String.format(strCats, strVaska, strPaws, strTail, year);
tvCatsInfo.setText(strFinal);
Ecco un semplice esempio di formattazione. Ricordatelo e usatelo nei posti giusti.

Risorsa stringa

È consigliabile archiviare le stringhe nelle risorse. L'accesso a livello di codice a una risorsa stringa viene eseguito in questo modo:
String catName = getResources().getString(R.string.barsik);

Estrai stringhe da array di stringhe nelle risorse

Supponiamo che tu abbia un array di stringhe definito nel file strings.xml chiamato cats_array. Quindi puoi accedere alle righe da risorse come questa:
Resources res = getResources();
String[] cats = res.getStringArray(R.array.cats_array);

Metodi

public char charAt (int index) Restituisce il carattere all'offset specificato in questa stringa. Il conto alla rovescia parte da 0. Non è necessario utilizzare valori negativi e inesistenti, sii più serio. Per estrarre più caratteri utilizzare getChars().
String testString = "Котёнок";
char myChar = testString.charAt(2);
tv.setText(Character.toString(myChar)); // выводит третий символ - т
public int codePointAt(int index) Restituisce il carattere Unicode in corrispondenza dell'indice specificato
String testString = "Котёнок";
int myChar = testString.codePointAt(3);
tv.setText(String.valueOf(myChar)); // возвращает 1105
public int codePointBefore(int index) Restituisce il carattere Unicode che precede l'indice specificato
String testString = "Котёнок";
int myChar = testString.codePointBefore(4);
tv.setText(String.valueOf(myChar)); // возвращает 1105
public int codePointCount(int start, int end) Calcola il numero di caratteri Unicode tra le posizioni starteend
String testString = "Котёнок";
int myChar = testString.codePointCount(0, 3);
tv.setText(String.valueOf(myChar)); // возвращает 3
public int compareTo(String string) Confronta la stringa specificata utilizzando i valori dei caratteri Unicode e calcola quale stringa è inferiore, uguale o maggiore della successiva. Può essere utilizzato per l'ordinamento. Si tiene conto del caso. Se le stringhe corrispondono, viene restituito 0, se minore di zero, la stringa chiamante è minore di string string, se maggiore di zero, allora la stringa chiamante è maggiore di string string. Le parole maiuscole vengono posizionate sopra le parole minuscole.
String testString = "Котёнок";

if (testString.compareTo("котёнок") == 0) {
    tvInfo.setText("Строки равны");
} else {
    tvInfo.setText("Строки не равны. Возвращено"
            + testString.compareTo("котёнок")); // возвращает -32
}
Ordiniamo l'array di stringhe utilizzando l'ordinamento a bolle.
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]);
}
Di conseguenza otteniamo:
Мы
везём
кота
с
собой
Come puoi vedere, cambiare la posizione dei termini non cambia la somma di ordinamento dei gatti. public int compareToIgnoreCase (String string) Confronta la stringa specificata utilizzando valori di caratteri Unicode, senza distinzione tra maiuscole e minuscole.
String testString = "Котёнок";

if (testString.compareToIgnoreCase("котёнок") == 0) {
    tv.setText("Строки равны"); // слова одинаковы, если не учитывать регистр
} else {
    tv.setText("Строки не равны. Возвращено"
            + testString.compareTo("котёнок"));
}
public String concat (String string) Concatena una stringa con la stringa specificata. Viene restituita una nuova stringa che contiene la concatenazione delle due stringhe. Nota che il nome stesso del metodo contiene un gatto!
String testString = "Сук";
String newString = testString.concat("кот");
tv.setText(newString);
Il metodo esegue la stessa funzione dell'operatore +e potrebbe essere scritto Сук + кот. Ma un vero gatto userà il metodo "gatto". public boolean contains (CharSequence cs) Determina se una stringa contiene una sequenza di caratteri inCharSequence
String testString = "котёнок";

if(testString.contains("кот")){
    infoTextView.setText("В слове котёнок содержится слово кот!");
}
public static String copyValueOf (char[] data, int start, int length) Crea una nuova stringa contenente i caratteri specificati dall'array Dataa partire dalla posizione start(numerazione in base zero) di lunghezza lunghezza . public static String copyValueOf(char[] data) Crea una nuova stringa contenente caratteri dall'array specificato. La modifica dell'array dopo la creazione della riga non modifica la riga creata. public boolean endsWith(String suffix) Controlla se una stringa termina con suffix.
String str1 = "Суккот";

if(str1.endsWith("кот"))
    infoTextView.setText("Слово заканчивается на котике");
else
    infoTextView.setText("Плохое слово. Нет смысла его использовать");
public boolean equals (Object string) Confronta l'oggetto specificato e una stringa e restituisce vero se le stringhe confrontate sono uguali, ad es. contiene gli stessi caratteri e nello stesso ordine con distinzione tra maiuscole e minuscole.
String str1 = "Кот";
String str2 = "Кошка";

if(str1.equals(str2))
    infoTextView.setText("Строки совпадают");
else
    infoTextView.setText("Строки не совпадают");
Il metodo non deve essere confuso con l'operatore ==, che confronta due riferimenti a oggetti e determina se si riferiscono alla stessa istanza. Vedi Confronto tra stringhe: equals()o ==? public boolean equalsIgnoreCase(String string) Confronta la stringa specificata con la stringa di origine senza distinzione tra maiuscole e minuscole e restituisce true se sono uguali. L'intervallo AZ è considerato uguale all'intervallo az.
String str1 = "Кот";
String str2 = "кот";

if(str1.equalsIgnoreCase(str2))
    infoTextView.setText("Строки совпадают");
else
    infoTextView.setText("Строки не совпадают");
public static String format(Locale locale, String format, Object... args)
Restituisce una stringa formattata utilizzando il formato fornito e argomenti localizzati nell'ambito specificato. Ad esempio data o ora
// выводим число типа float с двумя знаками после запятой
String.format("%.2f", floatValue);
Incolliamo due parole che appaiono su una nuova riga. In questo caso la seconda parola viene visualizzata in maiuscolo.
String str1 = "Кот";
String str2 = "васька";
String strResult = String.format("%s\n%S", str1, str2);
// выводим результат в TextView
infoTextView.setText(strResult);
Converti il ​​numero nel sistema ottale.
String str1 = "8";
int inInt = Integer.parseInt(str1); // конвертируем строку в число
String strResult = String.format("(Восьмеричное meaning): %o\n", inInt);

infoTextView.setText(strResult);
Per analogia, visualizziamo nel sistema esadecimale
String str1 = "255";
int inInt = Integer.parseInt(str1);
String strResult = String.format("(Шестнадцатеричное meaning): %x\n", inInt);
// число 255 будет выведено How ff
infoTextView.setText(strResult);
Per l'uso in maiuscolo %X, allora ffsarà FF. Per l'utilizzo del sistema decimale %d. La data può anche essere visualizzata in diversi modi.
Date now = new Date();
Locale locale = Locale.getDefault();
infoTextView.setText(
		String.format(locale, "%tD\n", now) + // (MM/DD/YY)
		String.format(locale, "%tF\n", now) + // (YYYY-MM-DD)
		String.format(locale, "%tr\n", now) + // Full 12-hour time
		String.format(locale, "%tz\n", now) + // Time zone GMT offset
		String.format(locale, "%tZ\n", now)); // Localized time zone bbreviation
public byte[] getBytes(String charsetName) Restituisce una stringa formattata utilizzando il formato fornito. public void getBytes(int start, int end, byte[] data, int index)e altri sovraccarichi Il metodo memorizza i caratteri in un array di byte, un'alternativa al metodo getChars(). Spesso utilizzato durante l'esportazione di stringhe da varie origini che utilizzano altri caratteri Unicode. Ad esempio, Java funziona per impostazione predefinita con caratteri Unicode a 16 bit e su Internet le stringhe spesso utilizzano Unicode a 8 bit, ASCII, ecc. public void getChars(int start, int end, char[] buffer, int index) Metodo per estrarre più caratteri da una stringa. È necessario specificare l'indice dell'inizio della sottostringa ( start), l'indice del carattere successivo alla fine della sottostringa da estrarre ( end ). L'array che riceve i caratteri selezionati si trova nel parametro buffer . Nel parametro indice viene passato l'indice dell'array a partire dal quale verrà scritta la sottostringa . Assicurarsi che l'array sia sufficientemente grande da contenere tutti i caratteri nella sottostringa specificata.
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() Restituisce un numero intero che è il codice hash per questo oggetto. public int indexOf(int c) Restituisce il numero della prima posizione incontrata con l'indice specificato c.
String testString = "котёнок";
// символ ё встречается в четвёртой позиции (index = 3)
infoTextView.setText(String.valueOf(testString.indexOf("ё")));
public int indexOf (int c, int start) Cerca l'indice da, a partire dalla posizionestart
String testString = "котёнок";
// вернёт -1, так How после 5 символа буквы ё нет
infoTextView.setText(String.valueOf(testString.indexOf("ё", 4)));
public int indexOf (String string) Cerca una stringa di caratterisubString
String testString = "У окошка";
infoTextView.setText(String.valueOf(testString.indexOf("кошка")));
public int indexOf (String subString, int start) Cerca una stringa di caratteri subStringa partire dalla posizionestart
String testString = "У окошка";
infoTextView.setText(String.valueOf(testString.indexOf("кошка", 2)));
public String intern () "Hash" una stringa public boolean isEmpty () Controlla se la stringa è vuota
if(catname.isEmpty()) {
    // здесь ваш code
}
Questo metodo è apparso nell'API 9 (Android 2.1). Per i dispositivi meno recenti, utilizzare String.length() == 0 public int lastIndexOf (String string) и другие перегруженные версии Restituisce il numero dell'ultima posizione incontrata nell'indice specificato. Ad esempio, puoi ottenere il nome del file senza estensione in questo modo:
filename.toString().substring(0, filename.getString().lastIndexOf("."));
In questo esempio, otteniamo la posizione dell'ultimo punto e la sottostringa che lo precede. public int length() Restituisce la lunghezza di una stringa
String testString = "котёнок";
infoTextView.setText(String.valueOf(testString.length())); // возвращает 7 (семь символов)
public boolean matches(String regularExpression) Controlla se una stringa corrisponde alle espressioni regolari.
public int offsetByCodePoints (int index, int codePointOffset)
Restituisce una posizione situata ad una distanza codePointOffsetsuccessiva alla posizione iniziale specificata dal parametro. index public boolean regionMatches (int thisStart, String string, int start, int length) Il metodo confronta la parte specificata della stringa con un'altra parte della stringa. È necessario specificare l'indice dell'inizio dell'intervallo di righe dell'oggetto chiamante della classe String. La stringa da confrontare viene passata nel parametro string. Nel parametro viene passato l'indice del carattere a partire dal quale si vuole effettuare il confronto start, mentre nel parametro viene passata la lunghezza della sottostringa da confrontare length. public boolean regionMatches (boolean ignoreCase, int thisStart, String string, int start, int length) Versione sovraccarica. Il metodo confronta la parte specificata di una stringa con un'altra parte della stringa, ignorando le maiuscole e minuscole. public String replace(CharSequence target, CharSequence replacement) и другие перегруженные версии Cambia un carattere o una sequenza di caratteri targetinreplacement
String testString = "whale";
// меняем и на о
infoTextView.setText(testString.replace("And", "о")); // возвращается кот
public String replaceAll (String regularExpression, String replacement) public String replaceFirst (String regularExpression, String replacement) Rimuove i primi caratteri utilizzando un'espressione regolare. Ad esempio, se devi rimuovere gli zeri all'inizio dei numeri 001, 007, 000024, puoi utilizzare questa chiamata.
String s = "001234-cat";
String s = s.replaceFirst ("^0*", ""); // останется 1234-cat
public String[] split (String regularExpression) и другие перегруженные версии Divide una stringa in una matrice di parole. Ad esempio, c'è una stringa Vaska Ryzhik Murzik Barsik e vogliamo ottenere una serie di nomi di gatti:
String catnames = "Васька Рыжик Мурзик Барсик";
String aCats[] = catnames.split(" ");  // по пробелу
Noi abbiamo:
aCats[0] = Васька
aCats[1] = Рыжик
aCats[2] = Мурзик
aCats[3] = Барсик
public boolean startsWith(String prefix) Controlla se una stringa inizia con caratteri prefixdall'inizio della stringa
String str1 = "котлета";

if(str1.startsWith("кот"))
    infoTextView.setText("Слово содержит кота");
else
    infoTextView.setText("Плохое слово. Нет смысла его использовать");
public boolean startsWith(String prefix, int start) Controlla se la stringa data inizia con i caratteri prefixnella posizione specificata.
String str1 = "Суккот";

if(str1.startsWith("кот", 3))
    infoTextView.setText("Слово содержит кота");
else
    infoTextView.setText("Плохое слово. Нет смысла его использовать");
public CharSequence subSequence (int start, int end) Simile al metodo substring(), ma può essere utilizzato per CharSequence. public String substring(int start)e altri sovraccarichi Crea una nuova sequenza/stringa con caratteri dalla stringa data che inizia in posizione startfino alla fine della riga/termina con il carattere in posizione end. La nuova riga contiene caratteri dalla startfine alla fine - 1, quindi prendiamo un carattere in più.
String testString = "скотина";

infoTextView.setText(testString.substring(1, 4)); // возвращается кот
public char[] toCharArray() Copia i caratteri di questa stringa in una matrice di caratteri. Lo stesso risultato si può ottenere attraverso il getChars(). La documentazione sconsiglia l'utilizzo di questo metodo, suggerendo l'estensione charAt().
String unusualCat = "Котёнок по имени Гав";

char[] yomoe = unusualCat.toCharArray();
infoTextView.setText(String.valueOf(yomoe[3]));
public String toLowerCase() и другие перегруженные версии Converte una stringa in minuscolo. La locale predefinita controlla la conversione. String gatto = "Gatto"; Stringa inferiore = cat.toLowerCase(); infoTextView.setText(inferiore); public String toString () Restituisce una stringa. Per la corda stessa, che di per sé è già una corda, restituire la corda è inutile (oh, come l'ho piegata). Ma questo metodo è in realtà molto utile per altre classi. public String toUpperCase() Converte una stringa in maiuscolo. La locale predefinita controlla la conversione.
String cat = "Кот";
String upper = cat.toUpperCase();
infoTextView.setText(upper);
public String trim() Rimuove gli spazi all'inizio e alla fine di una stringa.
String str = "   Hello Kitty  ".trim();
infoTextView.setText(str);
public static String valueOf(long value)e altri sovraccarichi Converte i contenuti (numeri, oggetti, caratteri, matrici di caratteri) in una stringa.
int catAge = 7; // это число

infoTextView.setText(String.valueOf(catAge)); // преобразовано в строку

Generazione di una stringa casuale

Diciamo che abbiamo bisogno di una stringa casuale di determinati caratteri.
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();
}

Confronto tra stringhe: equals()o ==?

Diamo un'occhiata a un esempio.
String str1 = "Murzik";
String str2 = new String(str1);
boolean isCat = str1 == str2;

infoTextView.setText(str1 + " == " + str2 + " -> " + isCat);
Sebbene le due variabili contengano la stessa parola, abbiamo a che fare con due oggetti diversi e l'operatore ==restituirà false . Una volta, quando gli alberi erano grandi, avevo bisogno di confrontare due stringhe provenienti da fonti diverse. Anche se le stringhe sembravano esattamente identiche, il confronto con l'operatore ==ha restituito false e mi ha confuso tutte le carte. E solo allora ho scoperto che dovevo usare il file equals(). Una stringa in Java è un oggetto separato che potrebbe non essere uguale a un altro oggetto, sebbene l'output della stringa possa apparire uguale sullo schermo. È solo che Java, nel caso dell'operatore logico ==(così come !=), confronta i riferimenti agli oggetti (non esiste un problema del genere quando si lavora con le primitive):
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));
// попробуйте и другие варианты
// infoTextView.setText(s1 + " equals " + s2 + ": " + (s1.equals(s2)));
// infoTextView.setText(s1 + " == " + s3 + ": " + (s1 == s3));
// infoTextView.setText(s1 + " equals " + s3 + ": " + (s1.equals(s3)));
// infoTextView.setText(s1 + " == " + s4 + ": " + (s1 == s4));
// infoTextView.setText(s1 + " equals " + s4 + ": " + (s1.equals(s4)));
// infoTextView.setText(s1 + " == " + s5 + ": " + (s1 == s5)); // false
// infoTextView.setText(s1 + " equals " + s5 + ": " + (s1.equals(s5)));
// infoTextView.setText(s1 + " == " + s6 + ": " + (s1 == s6)); // false
// infoTextView.setText(s1 + " equals " + s6 + ": " + (s1.equals(s6)));
Commenti
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION