Como obtenho o último caractere de uma string?

181

Como obtenho o último caractere de uma string?

public class Main
{
    public static void main(String[] args) 
    {
        String s = "test string";
        //char lastChar = ???
    }   
}
lonesarah
fonte
2
Você tem várias perguntas juntas. Em geral, sim, str.charAt(str.length() - 1)geralmente é o último caractere da string; mas considere o que acontece se str estiver vazio ou nulo.
Vance Maverick
Está funcionando bem. Mas a lógica da verificação do palidrome não parece correta, mencione também qual é o erro que você está recebendo.
Zimbabao 02/03
possível duplicata de Como remover o último caractere de uma string?
Nateowami 4/10

Respostas:

243

O código:

public class Test {
    public static void main(String args[]) {
        String string = args[0];
        System.out.println("last character: " +
                           string.substring(string.length() - 1)); 
    }
}

A saída de java Test abcdef:

last character: f
jcomeau_ictx
fonte
2
retorna como uma sequência, não como um personagem, mas você já sabe como fazer o último, e não sei ao certo o que você está procurando.
22411 j
8
E se sua string estiver vazia?
Danish Khan
4
Isso criará uma exceção nesse caso. você não gostaria?
precisa saber é o seguinte
A pergunta pede um caractere - isso retorna uma cadeia longa de um caractere. Deve usar charAt()nãosubstring()
Andrew
1
Andrew, se você olhar para a pergunta original antes de ela ser editada, verá que o OP já tentou charAt () e não era o que ela queria. Esse é um dos problemas de um meio semelhante ao wiki, como o SO, as perguntas são um alvo em movimento e, às vezes, as respostas podem parecer tolas como resultado.
jcomeau_ictx 31/03
96

Aqui está um método usando String.charAt() :

String str = "India";
System.out.println("last char = " + str.charAt(str.length() - 1));

A saída resultante é last char = a.

Aniket
fonte
1
tenha muito cuidado se desejar fazer um cálculo em um número dentro de uma string, pois os valores de caracteres são bem diferentes de um número literal e seus resultados matemáticos não funcionarão.
precisa saber é o seguinte
32

As outras respostas contêm muitos textos e códigos desnecessários. Aqui estão duas maneiras de obter o último caractere de uma String:

Caracteres

char lastChar = myString.charAt(myString.length() - 1);

Corda

String lastChar = myString.substring(myString.length() - 1);
Suragch
fonte
32

As outras respostas são muito completas e você deve definitivamente usá-las se estiver tentando encontrar o último caractere de uma string. Mas se você está apenas tentando usar um condicional (por exemplo, é o último caractere 'g'), você também pode fazer o seguinte:

if (str.endsWith("g")) {

ou, cordas

if (str.endsWith("bar")) {
Neil Chowdhury
fonte
Muito útil e direto ao ponto.
Aquarelle
4

Tente o seguinte:

if (s.charAt(0) == s.charAt(s.length() - 1))
Bala R
fonte
Esta resposta está errada. Ele apenas verifica se o primeiro e o último caractere são iguais.
Aquarelle
2

A solução simples é:

public String frontBack(String str) {
  if (str == null || str.length() == 0) {
    return str;
  }
  char[] cs = str.toCharArray();
  char first = cs[0];
  cs[0] = cs[cs.length -1];
  cs[cs.length -1] = first;
  return new String(cs);
}

Usando uma matriz de caracteres (cuidado com o argumento String desagradável, vazio ou String nulo!)

Outra solução usa o StringBuilder (que geralmente é usado para a manipulação da String, pois a própria String é imutável.

public String frontBack(String str) {
  if (str == null || str.length() == 0) {
    return str;
  }
  StringBuilder sb = new StringBuilder(str);  
  char first = sb.charAt(0);
  sb.setCharAt(0, sb.charAt(sb.length()-1));
  sb.setCharAt(sb.length()-1, first);
  return sb.toString();
}

Ainda outra abordagem (mais para instrução do que uso real) é esta:

public String frontBack(String str) {
  if (str == null || str.length() < 2) {
    return str;
  }
  StringBuilder sb = new StringBuilder(str);
  String sub = sb.substring(1, sb.length() -1);
  return sb.reverse().replace(1, sb.length() -1, sub).toString();
}

Aqui a string completa é invertida e, em seguida, a parte que não deve ser invertida é substituída pela substring. ;)

Yoko Zunna
fonte
2
public String lastChars(String a) {
if(a.length()>=1{
String str1 =a.substring(b.length()-1);
}
return str1;
}
Abdul Hanan Khan
fonte
Eu não acho que esse código será compilado (embora precise apenas de pequenas correções), depois que você o compilar, faça um teste em uma string vazia para ver se funciona.
Knells
2
Embora essa resposta seja provavelmente correta e útil, é preferível incluir algumas explicações para explicar como isso ajuda a resolver o problema. Isso se torna especialmente útil no futuro, se houver uma alteração (possivelmente não relacionada) que faça com que ele pare de funcionar e os usuários precisem entender como ela funcionou. Obrigado!
Hatchet #
2
public char LastChar(String a){
    return a.charAt(a.length() - 1);
}
vijay pandey
fonte
2
String aString = "This will return the letter t";
System.out.println(aString.charAt(aString.length() - 1));

A saída deve ser:

t

Feliz codificação!


fonte
1
Este é exatamente o mesmo exemplo dado aqui stackoverflow.com/a/13025371/773479
John Veldboom
2

Aqui está um método que eu uso para obter o último xx de uma string:

public static String takeLast(String value, int count) {
    if (value == null || value.trim().length() == 0) return "";
    if (count < 1) return "";

    if (value.length() > count) {
        return value.substring(value.length() - count);
    } else {
        return value;
    }
}

Em seguida, use-o assim:

String testStr = "this is a test string";
String last1 = takeLast(testStr, 1); //Output: g
String last4 = takeLast(testStr, 4); //Output: ring
Pierre
fonte
1
 public char lastChar(String s) {
     if (s == "" || s == null)
        return ' ';
    char lc = s.charAt(s.length() - 1);
    return lc;
}
rakib
fonte