O tipo de dado string é uma cadeia de caracteres justapostos e baseado em índice-zero. Em Java utilizamos a palavra reservarda String para declarar uma variável desse tipo. Abaixo, uma abstração da representação de uma string em um local de memória.

0 1 2 3 4 5
's' 't' 'r' 'i' 'n' 'g'

Para a declaração de um string em Java, utilizando a sintaxe A abaixo. A sintaxe B, diz respeito a atribuição de valor a uma variável do tipo string.

Sintaxe A
String nome_variavel;
Sintaxe B
String nome_variavel = "uma string java";
Onde
-

Em Java, uma string é um objeto e não pode ser acessada utilizando o indexador [] como em linguagens como C e C++. Os métodos da classe java.lang.String devem ser utilizados para manipulação de seu conteúdo.

Exemplo 1
public class MyClass {
    public static void main(String args[]) {
        String teste = "uma string em Java";
        System.out.println(teste);
    }
}
Saída
uma string em Java

Utilizando os contrutores da classe java.lang.String abaixo, também podemos declarar uma variável ou objeto:

String()
Cria um objeto string vazio

String(byte[] bytes)
Cria um objeto string baseado em um vetor de bytes. Codificação padrão.

String(char[] value)
Cria um objeto string baseado em um vetor de caracteres. Codificação padrão.

String(byte[] bytes, Charset charset)
String(byte[] bytes, int offset, int length)
String(byte[] bytes, int offset, int length, Charset charset)
String(byte[] bytes, int offset, int length, String charsetName)
String(byte[] bytes, String charsetName)
String(char[] value, int offset, int count)
String(int[] codePoints, int offset, int count)
String(String original)
String(StringBuffer buffer)
String(StringBuilder builder)
Exemplo 2
public class MyClass {

    public static void main(String args[]) {

     char vchar[] = {'A', 'B', 'C', 'D'};
     String str = new String(data);
     
     System.out.println(str);
    }
}
Saída
ABCD

O acesso dos caracteres de uma string em Java é feito utilizando o método charAt que recebe um índice ou posição do caractere desejado como argumento.

Sintaxe
charAt(indice);
Exemplo 3
public class MyClass {

    public static void main(String args[]) {

     char vchar[] = {'A', 'B', 'C', 'D'};
     String str = new String(data);
     
     System.out.println(str.charAt(0));
    }
}
Saída
A

Para descobrirmos o tamanho de uma string em Java, utilizamos o método length() que retorna um inteiro contendo o tamanho da string.

Sintaxe
variavel_string.length() 
Exemplo 4
public class MyClass {

    public static void main(String args[]) {

     char vchar[] = {'A', 'B', 'C', 'D'};
     String str = new String(data);
     
     System.out.println(str.length());
    }
}
Saída
4

Utilizando o método length podemos recuperar o tamanho de uma string e iterar sobre essa com o comando for visto em Java Básico: Comando de Repetição. O comando foreach pode ser utilizado também em conjunto com o método toCharArray.

Exemplo 5
import java.lang.String;

public class MyClass {

    public static void main(String args[]) {

     char data[] = {'A', 'B', 'C', 'D'};
     String str = new String(data);
     
     for(int i=0 ; i < str.length() ; i++){
        System.out.println(str.charAt(i));
     }
     
     System.out.println();
     
     for (char c: str.toCharArray()) {
         System.out.println(c);
     }
     
    }
}
Saída
A
B
C
D

A
B
C
D

Em Java podemos concatenar duas ou mais strings utilizando o operador (+). O método concat que recebe uma string como argumento também pode ser utilizado.

Sintaxe
string1 + string2
variavel_string.concat(argumento);
Exemplo 6
import java.lang.String;

public class MyClass {

    public static void main(String args[]) {

     char data[] = {'A', 'B', 'C', 'D'};
     String str = new String(data);
     
     System.out.println(str + "1234");
     System.out.println(str.concat("1234"));
     
    }
}
Saída
ABCD1234
ABCD1234

A classe java.lang fornece métodos para manipular nossas string. Abaixo uma lista de todos os métodos disponíveis.

Método Descrição -
charAt Retorna o caractere em uma posição Visitar
chars -
codePointAt - -
codePointBefor -
codePointCount - -
codePoints - -
compareTo Compara duas strings de forma lexográfica. Visitar
compareToIgnoreCase O mesmo que compareTo ignorando maiúscula e minúscula -
concat Concatena duas strings Visitar
contains Verifica se string contém uma sequência de caracteres Visitar
contentEquals - -
copyValueOf - -
describeConstable() - -
endsWith Verifica se string termina com uma sequência de caracteres Visitar
equals Compara duas string como objetos Visitar
equalsIgnoreCase o mesmo que equals ignorando ignorando maiúscula e minúscula -
format Retorna uma string formatada Visitar
formatted Retorna uma string formatada -
getBytes Retorna string como vetor de bytes Visitar
hashCode Retorna uma código que representa a string Visitar
indent Ajusta a identação de uma string -
indexOf Retorna o índice de uma caracter Visitar
intern - -
isBlank Verifica se string está vazia Visitar
isEmpty Verifica se string está vazia Visitar
join Realiza a união de duas ou mais strings Visitar
lastIndexOf Retorna último índice de uma sequencia de caracteres Visitar
length Retorna o tamanho da string Visitar
matches Verifica se string atende a uma expressão regular Visitar
offsetByCodePoints - -
regionMatches - -
repeat Retorna uma string repetida N vezes Visitar
replace Retorna uma string com caracteres subtituídos Visitar
replaceAll o mesmo que replace mas utilizando expressão regular Visitar
replaceFirst o mesmo replace mas apenas a primeira ocorrência Visitar
resolveConstantDesc - -
split Divide string em partes Visitar
startsWith Verifica se string é iniciada com uma sequência de caracteres Visitar
strip Remove espaço branco do início e fim de uma string -
stripIdent - -
stripLeading Remove espaço branco do início de uma string -
stripTrailing Remove espaço branco do fim de uma string -
subSequence - -
substring Retorna parte de uma string Visitar
toCharArray Retorna uma string como vetor de char Visitar
toLowerCase Converte caracteres para minúsculos Visitar
toString - -
toUpperCase Converte caracteres para maiúsculos Visitar
trim Remove caracteres de uma string Visitar
valueOf Retorna a representação em strin de um valor Visitar

Com o método charAt, podemos recuperar um caracter em uma determinada posição, ou índice, de uma string.

Sintaxe
public char charAt(int index)
Onde
index: posição do caracter contido em um string.
Retorno
Um char contendo o elemento em index.
Exemplo 7
public class Main
{
	public static void main(String[] args) {
	    
		String str = "Hello World";
		char ch = str.charAt(6);
	    System.out.println(ch);
	}
}
Saída
W

Para comparação entre duas string, de forma lexográfica, utilizamos o método campareTo que recebe como argumento uma string.

Sintaxe
public int compareTo(String anotherString)
Onde
anotherString : string para comparação
Retorno
0: Se string e anotherString são iguais 
> 1: string é maior que anotherString. Quantos caracteres a mais.
< 1: string é menor que anotherString. Quantos caracteres a menos.
Exemplo 8
public class Main
{
	public static void main(String[] args) {
	    
	    String str1 = "hello world";
	    String str2 = "hello";
	    String str3 = "hello world";
	    
	    System.out.println("str1 == str2 : " + str1.compareTo(str2));
	    System.out.println("str2 == str3 : " + str2.compareTo(str3));
	    System.out.println("str1 == str3 : " + str1.compareTo(str3));
	}
}
Saída
str1 == str2 : 6
str2 == str3 : -6
str1 == str3 : 0

O método concat é utilizado para concatenar strings. Uma string que é passada como argumento para o método.

Sintaxe
public String concat(String str)
Onde
str: string que desejamos concatenar.
Retorno
Nova string contendo str concatenada.
Exemplo 9
public class Main
{
	public static void main(String[] args) {
	    
		String str1 = "heLLo ";
		String str2 = "World";

        String ret = str1.concat(str2);
	    System.out.println(ret);
	}
}
Saída
heLLo World

Utilizando o método endsWith, podemos verificar se uma string termina com um determinado sufixo que é passado como argumento.

Sintaxe
public boolean endsWith(String suffix)
Onde
suffix: Sufixo para verificação
Retorno
true se string termina com sufixo, false caso contrário.
Exemplo 10
public class Main
{
	public static void main(String[] args) {
	    
		String str = "Hello World";

		System.out.println(str.endsWith("rld"));
	}
}
Saída
true

Para verificarmos se duas strings são iguais sem a preocupação lexográfica, utilizamo o métodos equals que recebe a string para compararação como argumento.

Sintaxe
public boolean equals(Object anObject)
Onde
anObject: Um objeto para comparar.
Retorno
true se iguais, false caso contrário. 
Exemplo 12
public class Main
{
	public static void main(String[] args) {
	    
		String str = "Hello World";
		String str2 = str;
		
		System.out.println(str.equals(str2));
	}
}
Saída
true

O método format é usado para escrevermos dados formatados em uma string. Os caracteres de escape e formatação vistos em Java Básico: Entrada e Saída são aceitos.

Sintaxe
public String format(string format,Object args);
public String format(Locale l, String format, Object... args)
Onde
format: string contendo formatadores
args: lista de argumentos para formatar de acordo com format.
                                         
Retorno
A string formatada format com os valores passados como argumento em args
Exemplo 13
public class Main
{
	public static void main(String[] args) {
	    
	    String str1 = "Uma \"%s\" formatada R$%.2f";
	    System.out.println(String.format(str1,"string",1.234));
	}
}
Saída
Uma "string" formatada R$1.23

O método getBytes é usado quando precisamos recuperar as informações contidas em uma string, mas no formato byte.

Sintaxe
public byte[] getBytes()  
public byte[] getBytes(Charset charset)
public byte[] getBytes(String charsetName)
Onde
charset: Codificação de caracteres da string
charsetName: nome codificação de caracteres
Retorno
Vetor de bytes que representam uma string.
Exemplo 14
public class Main
{
	public static void main(String[] args) {
	    
	    String str1 = "str";
	    byte[] bytes = str1.getBytes();

	    for(int i=0; i < bytes.length ; i++)
	        System.out.println(bytes[i]);
	}
}
Saída
115
116
114

O método hashCode retorna um código inteiro que representa uma string. Esse método não recebe nenhum argumento.

Sintaxe
public int hashCode()
Onde
-
Retorno
Inteiro contendo o hash da string
Exemplo 15
public class Main
{
	public static void main(String[] args) {
String str1 = "heLLo World";
 		System.out.printf("%08X",str1.hashCode());
	}
}
Saída
E47976A415

Para descobrir o índice da primeira ocorrência de uma substring ou caractere contido em uma string, utilizamos o método indexOf.

Sintaxe
public int indexOf(int ch)
public int indexOf(int ch, int fromIndex)
public int indexOf(String str)
public int indexOf(String str, int fromIndex)
Onde
ch: caractere para buscar o índice
fromIndex: índice inicial da busca
str: substring para buscar
Retorno
>= 0 : índice encontrado para o ch ou substring 
< 0: ch ou substring não encontrados
Exemplo 15
public class Main
{
	public static void main(String[] args) {
	    
	    String str1 = "string_#_string!string";

	    System.out.println(str1.indexOf("_#_"));
	    System.out.println(str1.indexOf("!"));
	}
}
Saída
6
15

Com o método isBlank podemos verificar se uma string contém apenas espaços em branco. Esse método não recebe argumentos.

Sintaxe
 public boolean isBlank()
Onde
-
Retorno
Booleano contendo true se a string possui apenas espaços em branco, false caso contrário.
Exemplo 16
public class Main
{
	public static void main(String[] args) {
	    
		String str1 = "  ";
        System.out.println(str2.isBlank());
	}
}
Saída
true

Para verificar se uma string está vazia ou não, utilizamos o método empty que recebe como argumento uma string que desejamos testar. Esse método retorna um booleano como resultado da verificação.

Sintaxe
 public boolean isEmpty()
Onde
-
Retorno
Booleano contendo true se a string está vazia e false caso contrário.
Exemplo 17
public class Main
{
	public static void main(String[] args) {
	    
		String str1 = "  ";
		String str2 = "";
		String str3 = "hello";
		

        System.out.println(str2.isEmpty());
        System.out.println(str3.isEmpty());
	}
}
Saída
true
false

O método join faz o oposto do método split, ele é usado para juntar/unir várias strings em uma. Esse método recebe um array de strings como argumento.

Sintaxe
public String join(string delimiter,String[] s);
public String join(string delimiter,String str1, String strN,…);
Onde
delimiter: string contendo o separador usado para quebrar a string. 
s: array de strings
str1..N: strings 
Retorno
Um vetor de strings contendo as partes divididas.
Exemplo 18
public class Main
{
	public static void main(String[] args) {
	    
		String[] str1 = {"heLLo","Java","World"};
	    String ret = String.join(";",str1);
        System.out.println(ret); 

        ret = String.join(";","heLLo","Java","World");
        System.out.println(ret);
	}
}
Saída
heLLo;Java;World
heLLo;Java;World

Para descobrirmos o índice da última ocorrência de uma substring ou caractere contido em uma string, utilizamos o método lastIndexOf.

Sintaxe
public int lastIndexOf(int ch)
public int lastIndexOf(int ch, int fromIndex)
public int lastIndexOf(String str)
public int lastIndexOf(String str, int fromIndex)
Onde
ch: caractere para buscar o índice
fromIndex: índice inicial da busca
str: substring para buscar
Retorno
int >= 0 : índice encontrado para o ch ou substring 
int < 0: ch ou substring não encontrados
Exemplo 19
public class Main
{
	public static void main(String[] args) {
	    
	    String str1 = "string_#_string_#_string";
	    System.out.println(str1.lastIndexOf("_#_"));
	}
}
Saída
15

Para termos conhecimento do tamanho das strings utilizadas em nossos programas, usamos o método length. Esse método não recebe argumentos.

Sintaxe
public int length()
Onde
-
Retorno
int contendo tamanho da string
Exemplo 20
public class Main
{
	public static void main(String[] args) {
	    
		String str1 = "hello world";

        int tam = str1.length();
        System.out.println(tam);
	}
}
Saída
11

O método matches é utilizado quando precisamos procurar padrões dentro de uma string que respeitam algumas regras como apenas dígitos, letras e outros.

Sintaxe
public boolean matches(String regex)
Onde
regex: string contendo as regras para busca
Retorno
true se regras contidas em regex atendem, false caso contrário
Exemplo 21
public class Main
{
	public static void main(String[] args) {
	   
	    //regras
	    //A : apenas letras maiusculas: A-Z
	    //1 : apenas digitos : 0-9
	    //- : caracter -
	    //F : apenas digitos hexa: 0-9A-F 
	    //0 : dígito 0
	  
	    String str1 = "A1-F0";
        boolean ret = str1.matches("[A-Z][0-9]-[0-9A-F]0");
	    System.out.println(ret);
	}
}
Saída
true

Utilizando o método repeat podemos gerar uma string em que seu conteúdo é repetido um número de vezes.

Sintaxe
public String repeat(int count)
Onde
count: número de repetições
Retorno
Uma string repetida em o número definido por count.
Exemplo 22
public class Main
{
	public static void main(String[] args) {
	 
    	String str = "repeat";
        System.out.println(str.repeat(3));
	}
}
Saída
repeatrepeatrepeat

Para substituirmos substrings ou caracteres em nossos strings, utilizamos o método replace. Esse método irá substituir todas as ocorrências encontradas.

Sintaxe
public String replace(char OldChar, char newChar)
public String replace(CharSequence target, Charsequence replacement)
Onde
oldChar - caracter que será substituído.
newChar - caracter para substituir oldChar.
Retorno
Uma string contendo os caracteres oldChar substituídos por newChar.
Exemplo 23
public class Main
{
	public static void main(String[] args) {
	   
	    String str1 = "Hello C#!";   
        	    String ret = str1.replace("C#","JAVA");
	    System.out.println(ret);
	    str1 = "Hello C!";
	    ret = str1.replace('!','#');
	    System.out.println(ret);
	}
}
Saída
Hello JAVA!
Hello C#

O método replaceAll substuitui todas as ocorrências de uma substring que atendam as regras de uma expressão regular que é passada como argumento.

Sintaxe
public String replaceAll(String regex, String replacement)
Onde
regex: expressão regular
replacement: string para substuir cada ocorrência encontrada
Retorno
Uma string contendo ocorrências substituídas por replacement
Exemplo 23
public class Main
{
	public static void main(String[] args) {
	    
		String str1 = "os códigos hexa A1-F0 e B0-C0 foram substituídos por FF";
        System.out.println(str1.replaceAll("[A-F][0-9]","FF"));
	}
}
Saída
os códigos hexa FF-FF e FF-FF foram substituídos por FF

Semelhante ao método replaceAll, mas substuitui apenas a primeira ocorrências de uma substring que atendam as regras de uma expressão regular que é passada como argumento.

Sintaxe
public String replaceFirst(String regex, String replacement)
Onde
regex: expressão regular
replacement: string para substuir cada ocorrência encontrada
Retorno
Uma string contendo apenas a primeira ocorrência substituída por replacement
Exemplo 24
public class Main
{
	public static void main(String[] args) {
	    
		String str1 = "dos códigos A1-F0 e B0-C0 apenas F0 e BC-0C não foram substituídos por FF";
    
        System.out.println(str1.replaceFirst("[A-F][0-9]","FF"));
	}
}
Saída
os códigos hexa FF-FF e FF-FF foram substituídos por FF

O objetivo do método split é quebrar uma string em substrings. Esse método recebe dois argumentos e retorna um array de string.

Sintaxe
public String[] split(String regex)
String[] split(string regex, int limit)
Onde
regex: expressão regular contendo separadores ou regras
Retorno
Vetor de strings contendo partes dividadas
Exemplo 25
public class Main
{
	public static void main(String[] args) {
	    
	    String str1 = "heLLo;Java;World";
	    String[] ret = str1.split(";");

	    for( int i=0 ; i < ret.length ; i++)
	        System.out.println(ret[i]); 
	}
}
Saída
heLLo
Java
World

Para verificarmos se uma string inicia com um determinado prefixo utilizamos o método startsWith. Um string ou conjunto de caracteres é passado como argumento para o método.

Sintaxe
public boolean startsWith(String prefix)
public boolean startsWith(String prefix, int toffset)
Onde
prefix: string contendo prefixo para verificação
Retorno
true se a string começa com chars, false: se não começa com chars
Exemplo 26
public class Main
{
	public static void main(String[] args) {
	    
	    String padrao = "__string exemplo";
        System.out.println(padrao.startsWith("__"));
	}
}
Saída
true

Com o uso do método substring podemos extrair parte do conteúdo de uma string. Esse método pode receber os índices inicial e final como argumentos.

Sintaxe
public String substring(int beginIndex);
public String substring(int beginIndex, int endIndex)
Onde
beginIndex: Índice para extrair uma substring. 
endIndex: Índice final para extrair uma substring. 
Retorno
Uma string contendo a substring extraída.
Exemplo 27
public class Main
{
	public static void main(String[] args) {
	    
		String str1 = "heLLo Java World";

	    	System.out.println(str1.substring(6));
        		System.out.println(str1.substring(6,10));
	}
}
Saída
Java World
Java

O método toCharArray é semelhante ao método getBytes, mas retorna um um array de caracteres que representam uma string.

Sintaxe
public char[] toCharArray()
Onde
-
Retorno
Um vetor de char que representam os caracteres da string.
Exemplo 28
public class Main
{
	public static void main(String[] args) {
	    
	    String str1 = "string";
	    char[] chars = str1.toCharArray();
	    System.out.println(chars);
	}
}
Saída
string

Para a conversão de strings de letras maiúsculas para minúsculas, utilizamos os métodos toLowerCase. Esse método não recebe argumentos.

Sintaxe
public String toLowerCase()
Onde
-
Retorno
String contendo caracteres em letra minúscula
Exemplo 29
public class Main
{
	public static void main(String[] args) {
	    
		String str1 = "heLLo World";
	    System.out.println(str1.toLowerCase());

	}
}
Saída
hello world

Para a conversão de strings de letras minúsculas para maiúsculas, utilizamos os métodos toUpperCase. Esse método não recebe argumentos.

Sintaxe
public String toUpperCase()
Onde
-
Retorno
String contendo caracteres em letra maiúsculas
Exemplo 30
public class Main
{
	public static void main(String[] args) {
	    
		String str1 = "heLLo World";
	    System.out.println(str1.toLowerCase());

	}
}
Saída
hello world

Com o método trim, podemos remover os espaços em branco no início e fim de uma string. Nenhum argumento é recebido por esse método.

Sintaxe
public String trim()
Onde
-
Retorno
String sem espaços em branco
Exemplo 31
public class Main
{
	public static void main(String[] args) {
	    
	    String str1 = "   heLLo World   ";
	    System.out.printf("|%s|\n",str1);
	    String ret = str1.trim();
	    System.out.printf("|%s|",ret);
	}
}
Saída
|   heLLo World   |
|heLLo World|

Com o método estático valueOf podemos converter uma valor primitivo ou vetor de caracteres para sua representação em string.

Sintaxe
public static String valueOf(boolean b)
public static String valueOf(char c)
public static String valueOf(char[] data)
public static String valueOf(char[] data, int offset, int count)
public static String valueOf(double d)
public static String valueOf(float f)
public static String valueOf(int i)
public static String valueOf(long l)
public static String valueOf(Object obj)
Onde
c, data, d, f, i, l e obj : argumentos de acordo com formato
Retorno
String contendo representação c, data, d, f, i, l e obj em formato string
Exemplo 32
public class Main
{
	public static void main(String[] args) {
	 
    	char[] chars = {'a','b','c'};
        System.out.println(String.valueOf(true));
        System.out.println(String.valueOf('Z'));
        System.out.println(String.valueOf(chars));
        System.out.println(String.valueOf(1.99));
        System.out.println(String.valueOf(100));
	}
}
Saída
true
Z
abc
1.99
100
  1. 23/07/2025 - revisão 4 - correções pontuais; ajustes em sintaxes
  2. 23/09/2024 - revisão 3 - ajustes pontuais
  3. 02/09/2024 - revisão 2 - Correção em link de objetivo: métodos da classe vector
  4. 06/02/2024 - revisão 1 - correção em navegação, descrição e erros gramaticais
  5. 04/09/2023 - versão inicial