JavaRush /Blogue Java /Random-PT /Classe de cordas
articles
Nível 15

Classe de cordas

Publicado no grupo Random-PT
  • Métodos
  • Gerando uma string aleatória
  • Comparação de strings: equals()ou ==?
A aula é Stringmuito utilizada por programadores, por isso deve ser muito bem aprendida. Sequência de classe - 1Lembre-se de que os objetos de classe Stringsão imutáveis. Então, quando você pensa que está alterando uma string, na verdade está criando uma nova string. Java possui classes especiais StringBuffere StringBuilderque permitem alterações em uma string. As classes String, StringBuffer, StringBuildersão definidas no pacote java.lang e estão disponíveis automaticamente sem uma declaração de importação. Todas as três classes implementam a interface CharSequence. Criar uma string é muito simples. Por exemplo, você pode fazer isso:
String aboutCat = "Кот - это звучит гордо, а если наступить на хвост, то громко";
Você pode criar um array de strings:
String[] cats = {"Васька", "Barsik", "Murzik"};
Você pode criar um objeto de classe vazio String:
String str = new String();
Você pode criar uma string por meio de um array de caracteres:
char[] chars = { 'c', 'a', 't' };
String str = new String(chars);
Há também um construtor que permite definir o intervalo de uma matriz de caracteres. Você precisa especificar o início do intervalo e o número de caracteres a serem usados:
char[] chars = {'c', 'a', 't', 'a', 'm', 'a', 'r', 'a', 'n' };
String str = new String(chars, 0, 3);
Você pode criar um objeto de classe Stringa partir de um objeto de classe StringBufferusando StringBuilderos seguintes construtores:
String(StringBuffer an object_StrBuf)
String(StringBuilder an object_StrBuild)

Operadores +e += paraString

Em Java, o sinal de mais ( +) significa concatenação de strings, ou seja, combinação de strings.
String cat = "Кот";
String name = "Васька";
//складываем две строки и пробел между ними, чтобы слова не слиплись
String fullname = cat + " " + name; // получится Кот Васька
Se um dos operandos em uma expressão contiver uma string, os outros operandos também deverão ser strings. Portanto, o próprio Java pode converter variáveis ​​em uma representação de string, mesmo que não sejam strings.
int digit = 4;
String paws = " лапы";
String aboutcat = digit + paws; // хотя мы складываем число и строку, но все равно получим строку
За кулисами Java за нас преобразовало число 4 в строку "4"

Formatando strings

Vamos supor que temos um recurso de string:
<string name="aboutcat">У кота по имени Барсик четыре лапы, один хвост. Ему 5 лет</string>
Para exibir esta string programaticamente no elemento TextView, você pode usar o código:
TextView tvCatsInfo = (TextView)findViewById(R.id.textView1);
tvCatsInfo.setText(R.string.aboutcat);
Imagine que você tem vários gatos. Você pode, é claro, ter sua própria linha para cada gato. Mas as falas são muito parecidas, apenas mudam os nomes e as idades. Você também pode alterar o número de patas e rabos (o que você está fumando?). Nesses casos, você pode aplicar formatação de string. Precisamos determinar as palavras que iremos alterar e substituí-las por um conjunto especial de caracteres que começam com um símbolo de porcentagem, depois um número incrementado em um e, a seguir, $spara strings ou $dnúmeros. Então, vamos alterar nosso recurso de string assim:
<string name="aboutcat">У кота по имени %1$s %2$s лапы, %3$s хвост. Ему %4$d лет</string>
Vamos fazer alterações no código:
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 você tem um gato Vaska e ele tem seis anos, adicione duas variáveis ​​​​e formate a linha
String strVaska = "Васька";
year = 6;
String strFinal = String.format(strCats, strVaska, strPaws, strTail, year);
tvCatsInfo.setText(strFinal);
Aqui está um exemplo simples de formatação. Lembre-se disso e use-o nos lugares certos.

Recurso de string

É aconselhável armazenar strings em recursos. O acesso programático a um recurso de string é feito assim:
String catName = getResources().getString(R.string.barsik);

Extraia strings de matrizes de strings em recursos

Digamos que você tenha um array de strings definido em um arquivo strings.xml chamado cats_array. Então você pode acessar linhas de recursos como este:
Resources res = getResources();
String[] cats = res.getStringArray(R.array.cats_array);

Métodos

public char charAt (int index) Retorna o caractere no deslocamento especificado nesta string. A contagem regressiva começa em 0. Não há necessidade de usar valores negativos e inexistentes, seja mais sério. Para extrair vários caracteres, use getChars().
String testString = "Котёнок";
char myChar = testString.charAt(2);
tv.setText(Character.toString(myChar)); // выводит третий символ - т
public int codePointAt(int index) Retorna o caractere Unicode no índice fornecido
String testString = "Котёнок";
int myChar = testString.codePointAt(3);
tv.setText(String.valueOf(myChar)); // возвращает 1105
public int codePointBefore(int index) Retorna o caractere Unicode que precede o índice fornecido
String testString = "Котёнок";
int myChar = testString.codePointBefore(4);
tv.setText(String.valueOf(myChar)); // возвращает 1105
public int codePointCount(int start, int end) Calcula o número de caracteres Unicode entre posições starteend
String testString = "Котёнок";
int myChar = testString.codePointCount(0, 3);
tv.setText(String.valueOf(myChar)); // возвращает 3
public int compareTo(String string) Compara a string especificada usando valores de caracteres Unicode e calcula qual string é menor, igual ou maior que a próxima. Pode ser usado para classificação. O caso é levado em consideração. Se as strings corresponderem, 0 será retornado; se for menor que zero, a string de chamada será menor que string string; se for maior que zero, a string de chamada será maior que string string. Palavras maiúsculas são colocadas acima das palavras minúsculas.
String testString = "Котёнок";

if (testString.compareTo("котёнок") == 0) {
    tvInfo.setText("Строки равны");
} else {
    tvInfo.setText("Строки не равны. Возвращено"
            + testString.compareTo("котёнок")); // возвращает -32
}
Vamos classificar o array de strings usando bubble sort.
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]);
}
Como resultado obtemos:
Мы
везём
кота
с
собой
Como você pode ver, alterar os locais dos termos não altera a soma de classificação dos gatos. public int compareToIgnoreCase (String string) Compara a cadeia de caracteres especificada usando valores de caracteres Unicode, insensíveis a maiúsculas e minúsculas.
String testString = "Котёнок";

if (testString.compareToIgnoreCase("котёнок") == 0) {
    tv.setText("Строки равны"); // слова одинаковы, если не учитывать регистр
} else {
    tv.setText("Строки не равны. Возвращено"
            + testString.compareTo("котёнок"));
}
public String concat (String string) Concatena uma string com a string especificada. É retornada uma nova string que contém a concatenação das duas strings. Observe que o próprio nome do método contém um gato!
String testString = "Сук";
String newString = testString.concat("кот");
tv.setText(newString);
O método executa a mesma função que o operador +e pode ser escrito Сук + кот. Mas uma pessoa que gosta de gatos de verdade usará o método do "gato". public boolean contains (CharSequence cs) Determina se uma string contém uma sequência de caracteres emCharSequence
String testString = "котёнок";

if(testString.contains("кот")){
    infoTextView.setText("В слове котёнок содержится слово кот!");
}
public static String copyValueOf (char[] data, int start, int length) Cria uma nova string contendo os caracteres especificados da matriz Datacomeçando na posição start(numeração baseada em zero) de comprimento length . public static String copyValueOf(char[] data) Cria uma nova string contendo caracteres da matriz especificada. Alterar a matriz após a linha ter sido criada não altera a linha criada. public boolean endsWith(String suffix) Verifica se uma string termina com suffix.
String str1 = "Суккот";

if(str1.endsWith("кот"))
    infoTextView.setText("Слово заканчивается на котике");
else
    infoTextView.setText("Плохое слово. Нет смысла его использовать");
public boolean equals (Object string) Compara o objeto especificado e uma string e retorna verdadeiro se as strings comparadas forem iguais, ou seja, contém os mesmos caracteres e na mesma ordem de distinção entre maiúsculas e minúsculas.
String str1 = "Кот";
String str2 = "Кошка";

if(str1.equals(str2))
    infoTextView.setText("Строки совпадают");
else
    infoTextView.setText("Строки не совпадают");
O método não deve ser confundido com o operador ==, que compara duas referências de objetos e determina se elas se referem à mesma instância. Veja Comparação de Strings: equals()ou ==? public boolean equalsIgnoreCase(String string) Compara a cadeia de caracteres especificada com a cadeia de origem sem distinção entre maiúsculas e minúsculas e retorna verdadeiro se forem iguais. O intervalo AZ é considerado igual ao intervalo az.
String str1 = "Кот";
String str2 = "кот";

if(str1.equalsIgnoreCase(str2))
    infoTextView.setText("Строки совпадают");
else
    infoTextView.setText("Строки не совпадают");
public static String format(Locale locale, String format, Object... args)
Retorna uma string formatada usando o formato fornecido e argumentos localizados no escopo fornecido. Por exemplo data ou hora
// выводим число типа float с двумя знаками после запятой
String.format("%.2f", floatValue);
Colamos duas palavras que aparecem em uma nova linha. Neste caso, a segunda palavra é exibida em maiúsculas.
String str1 = "Кот";
String str2 = "васька";
String strResult = String.format("%s\n%S", str1, str2);
// выводим результат в TextView
infoTextView.setText(strResult);
Converta o número para o sistema octal.
String str1 = "8";
int inInt = Integer.parseInt(str1); // конвертируем строку в число
String strResult = String.format("(Восьмеричное meaning): %o\n", inInt);

infoTextView.setText(strResult);
Por analogia, exibimos em sistema hexadecimal
String str1 = "255";
int inInt = Integer.parseInt(str1);
String strResult = String.format("(Шестнадцатеричное meaning): %x\n", inInt);
// число 255 будет выведено How ff
infoTextView.setText(strResult);
Para uso em letras maiúsculas %X, então ffserá FF. Para uso do sistema decimal %d. A data também pode ser exibida de diferentes maneiras.
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) Retorna uma string formatada usando o formato fornecido. public void getBytes(int start, int end, byte[] data, int index)e outras sobrecargas O método armazena caracteres em uma matriz de bytes, uma alternativa ao getChars(). Frequentemente usado ao exportar strings de várias fontes que usam outros caracteres Unicode. Por exemplo, Java por padrão funciona com caracteres Unicode de 16 bits e, na Internet, as strings geralmente usam Unicode de 8 bits, ASCII, public void getChars(int start, int end, char[] buffer, int index) etc. Você precisa especificar o índice do início da substring ( start), o índice do caractere após o final da substring a ser extraída ( end ). O array que recebe os caracteres selecionados está no parâmetro buffer . O índice do array, a partir do qual a substring será escrita, é passado no parâmetro index . Certifique-se de que a matriz seja grande o suficiente para conter todos os caracteres da substring especificada.
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() Retorna um número inteiro que é o código hash deste objeto. public int indexOf(int c) Retorna o número da primeira posição encontrada com o índice c especificado.
String testString = "котёнок";
// символ ё встречается в четвёртой позиции (index = 3)
infoTextView.setText(String.valueOf(testString.indexOf("ё")));
public int indexOf (int c, int start) Procura o índice, começando na posiçãostart
String testString = "котёнок";
// вернёт -1, так How после 5 символа буквы ё нет
infoTextView.setText(String.valueOf(testString.indexOf("ё", 4)));
public int indexOf (String string) Pesquisa uma sequência de caracteressubString
String testString = "У окошка";
infoTextView.setText(String.valueOf(testString.indexOf("кошка")));
public int indexOf (String subString, int start) Procura uma sequência de caracteres subStringcomeçando na posiçãostart
String testString = "У окошка";
infoTextView.setText(String.valueOf(testString.indexOf("кошка", 2)));
public String intern () "Hashes" uma string public boolean isEmpty () Verifica se a string está vazia
if(catname.isEmpty()) {
    // здесь ваш code
}
Este método apareceu na API 9 (Android 2.1). Para dispositivos mais antigos, use String.length() == 0 public int lastIndexOf (String string) и другие перегруженные версии Retorna o número da última posição encontrada no índice especificado. Por exemplo, você pode obter o nome do arquivo sem extensão assim:
filename.toString().substring(0, filename.getString().lastIndexOf("."));
Neste exemplo, obtemos a posição do último ponto e a substring antes dele. public int length() Retorna o comprimento de uma string
String testString = "котёнок";
infoTextView.setText(String.valueOf(testString.length())); // возвращает 7 (семь символов)
public boolean matches(String regularExpression) Verifica se uma string corresponde a expressões regulares.
public int offsetByCodePoints (int index, int codePointOffset)
Retorna uma posição localizada a uma distância codePointOffsetapós a posição inicial especificada pelo parâmetro. index public boolean regionMatches (int thisStart, String string, int start, int length) O método compara a parte especificada da string com outra parte da string. Você deve especificar o índice do início do intervalo de linhas do objeto de chamada da classe String. A string a ser comparada é passada no parâmetro string. O índice do caractere a partir do qual a comparação deve ser realizada é passado no parâmetro start, e o comprimento da substring a ser comparada é passado no parâmetro length. public boolean regionMatches (boolean ignoreCase, int thisStart, String string, int start, int length) Versão sobrecarregada. O método compara a parte especificada de uma string com outra parte da string, ignorando maiúsculas e minúsculas. public String replace(CharSequence target, CharSequence replacement) и другие перегруженные версии Altera um caractere ou sequência de caracteres targetparareplacement
String testString = "whale";
// меняем и на о
infoTextView.setText(testString.replace("And", "о")); // возвращается кот
public String replaceAll (String regularExpression, String replacement) public String replaceFirst (String regularExpression, String replacement) Remove os primeiros caracteres usando uma expressão regular. Por exemplo, se você precisar remover zeros do início dos números 001, 007, 000024, poderá usar esta chamada.
String s = "001234-cat";
String s = s.replaceFirst ("^0*", ""); // останется 1234-cat
public String[] split (String regularExpression) и другие перегруженные версии Divide uma string em um array de palavras. Por exemplo, há uma string Vaska Ryzhik Murzik Barsik e queremos obter uma série de nomes de gatos:
String catnames = "Васька Рыжик Мурзик Барсик";
String aCats[] = catnames.split(" ");  // по пробелу
Nós temos:
aCats[0] = Васька
aCats[1] = Рыжик
aCats[2] = Мурзик
aCats[3] = Барсик
public boolean startsWith(String prefix) Verifica se uma string começa com caracteres prefixdo início da string
String str1 = "котлета";

if(str1.startsWith("кот"))
    infoTextView.setText("Слово содержит кота");
else
    infoTextView.setText("Плохое слово. Нет смысла его использовать");
public boolean startsWith(String prefix, int start) Verifica se a string fornecida começa com caracteres prefixna posição especificada.
String str1 = "Суккот";

if(str1.startsWith("кот", 3))
    infoTextView.setText("Слово содержит кота");
else
    infoTextView.setText("Плохое слово. Нет смысла его использовать");
public CharSequence subSequence (int start, int end) Semelhante ao método substring(), mas pode ser usado para CharSequence. public String substring(int start)e outras sobrecargas Cria uma nova sequência/string com caracteres da string fornecida começando em position startaté o final da linha/terminando com o caracter em position end. A nova linha contém caracteres do startfinal - 1, então pegamos mais um caractere.
String testString = "скотина";

infoTextView.setText(testString.substring(1, 4)); // возвращается кот
public char[] toCharArray() Copia os caracteres desta string para uma matriz de caracteres. O mesmo resultado pode ser obtido através do getChars(). A documentação não recomenda o uso deste método, sugerindo o charAt().
String unusualCat = "Котёнок по имени Гав";

char[] yomoe = unusualCat.toCharArray();
infoTextView.setText(String.valueOf(yomoe[3]));
public String toLowerCase() и другие перегруженные версии Converte uma string em minúsculas. A localidade padrão controla a conversão. String gato = "Gato"; String inferior = cat.toLowerCase(); infoTextView.setText(inferior); public String toString () Retorna uma string. Para a corda em si, que já é uma corda, devolver a corda é inútil (ah, como eu a dobrei). Mas este método é realmente muito útil para outras classes. public String toUpperCase() Converte uma string em maiúsculas. A localidade padrão controla a conversão.
String cat = "Кот";
String upper = cat.toUpperCase();
infoTextView.setText(upper);
public String trim() Remove espaços no início e no final de uma string.
String str = "   Hello Kitty  ".trim();
infoTextView.setText(str);
public static String valueOf(long value)e outras sobrecargas Converte conteúdo (números, objetos, caracteres, matrizes de caracteres) em uma string.
int catAge = 7; // это число

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

Gerando uma string aleatória

Digamos que precisamos de uma sequência aleatória de determinados caracteres.
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();
}

Comparação de strings: equals()ou ==?

Vejamos um exemplo.
String str1 = "Murzik";
String str2 = new String(str1);
boolean isCat = str1 == str2;

infoTextView.setText(str1 + " == " + str2 + " -> " + isCat);
Embora as duas variáveis ​​contenham a mesma palavra, estamos lidando com dois objetos diferentes e o operador ==retornará false . Certa vez, quando as árvores eram grandes, precisei comparar duas strings de fontes diferentes. Embora as strings parecessem exatamente iguais, a comparação usando o operador ==retornou falso e confundiu todas as cartas para mim. E só então descobri que preciso usar o equals(). Uma string em Java é um objeto separado que pode não ser igual a outro objeto, embora a saída da string possa parecer a mesma na tela. Acontece que Java, no caso do operador lógico ==(assim como !=), compara referências a objetos (esse problema não existe quando se trabalha com primitivos):
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)));
Comentários
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION