- Métodos
- Gerando uma string aleatória
- Comparação de strings:
equals()
ou ==
?
A aula é
String
muito utilizada por programadores, por isso deve ser muito bem aprendida.
Lembre-se de que os objetos de classe
String
são imutáveis. Então, quando você pensa que está alterando uma string, na verdade está criando uma nova string. Java possui classes especiais
StringBuffer
e
StringBuilder
que permitem alterações em uma string. As classes
String
,
StringBuffer
,
StringBuilder
sã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
String
a partir de um objeto de classe
StringBuffer
usando
StringBuilder
os 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,
$s
para strings ou
$d
nú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));
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));
public int codePointCount(int start, int end)
Calcula o número de caracteres Unicode entre posições
start
e
end
String testString = "Котёнок";
int myChar = testString.codePointCount(0, 3);
tv.setText(String.valueOf(myChar));
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("котёнок"));
}
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 em
CharSequence
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
Data
começ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
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);
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);
infoTextView.setText(strResult);
Para uso em letras maiúsculas
%X
, então
ff
será
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) +
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)
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 = "котёнок";
infoTextView.setText(String.valueOf(testString.indexOf("ё")));
public int indexOf (int c, int start)
Procura o índice, começando na posição
start
String testString = "котёнок";
infoTextView.setText(String.valueOf(testString.indexOf("ё", 4)));
public int indexOf (String string)
Pesquisa uma sequência de caracteres
subString
String testString = "У окошка";
infoTextView.setText(String.valueOf(testString.indexOf("кошка")));
public int indexOf (String subString, int start)
Procura uma sequência de caracteres
subString
começando na posição
start
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()) {
}
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()));
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
codePointOffset
apó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
target
para
replacement
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*", "");
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
prefix
do 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
prefix
na 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
start
até o final da linha/terminando com o caracter em position
end
. A nova linha contém caracteres do
start
final - 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));
GO TO FULL VERSION