¿Cómo obtengo el último carácter de una cadena?


181

¿Cómo obtengo el último carácter de una cadena?

public class Main
{
    public static void main(String[] args) 
    {
        String s = "test string";
        //char lastChar = ???
    }   
}

2
Tienes varias preguntas mezcladas. En términos generales, sí, str.charAt(str.length() - 1)suele ser el último carácter de la cadena; pero considere lo que sucede si str está vacío o es nulo.
Vance Maverick

Está funcionando bien. Pero la lógica de la comprobación de palidrome no suena correcta, por favor mencione también cuál es el error que está recibiendo.
Zimbabao

Respuestas:


243

El 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)); 
    }
}

La salida de java Test abcdef:

last character: f

2
lo devuelve como una cadena, no como un personaje, pero ya sabes cómo hacer esto último, y no tengo claro qué es lo que buscas.
jcomeau_ictx

8
¿Qué pasa si tu cadena está vacía?
Danish Khan

44
provocará una excepción en ese caso. ¿no te gustaría?
jcomeau_ictx

La pregunta solicita un carácter: esto devuelve una cadena larga de un carácter. Debe utilizar charAt()nosubstring()
Andrew

1
Andrew, si vuelves a mirar la pregunta original antes de que se editara, verás que el OP ya probó charAt () y no era lo que ella quería. Ese es uno de los problemas con un medio tipo wiki como SO, las preguntas son un objetivo en movimiento y, a veces, las respuestas pueden parecer tontas como resultado.
jcomeau_ictx

96

Aquí hay un método que usa String.charAt():

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

El resultado resultante es last char = a.


1
tenga mucho cuidado si desea hacer un cálculo en un número dentro de una cadena ya que los valores de caracteres son bastante diferentes a un número literal y sus resultados matemáticos no funcionarán.
JesseBoyd

32

Las otras respuestas contienen mucho texto y código innecesarios. Aquí hay dos formas de obtener el último carácter de una cadena:

carbonizarse

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

Cuerda

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

32

Las otras respuestas son muy completas, y definitivamente debes usarlas si estás tratando de encontrar el último carácter de una cadena. Pero si solo está tratando de usar un condicional (por ejemplo, es el último carácter 'g'), también puede hacer lo siguiente:

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

o cadenas

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

Muy útil y al grano.
Aquarelle

4

Prueba esto:

if (s.charAt(0) == s.charAt(s.length() - 1))

Esta respuesta es incorrecta. Solo verifica si el primer y el último carácter son iguales.
Aquarelle

2

La solución simple es:

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 una matriz de caracteres (¡cuidado con el desagradable String vacío o el argumento String nulo!)

Otra solución usa StringBuilder (que generalmente se usa para realizar la manupilación de String ya que String es inmutable.

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();
}

Otro enfoque (más para la instrucción que el uso real) es este:

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();
}

Aquí la cadena completa se invierte y luego la parte que no se debe invertir se reemplaza con la subcadena. ;)


2
public String lastChars(String a) {
if(a.length()>=1{
String str1 =a.substring(b.length()-1);
}
return str1;
}

No creo que este código se compile (solo necesita pequeñas correcciones), una vez que lo compiles, pruébalo en una cadena vacía para ver si funciona.
arrodilla el

2
Si bien esta respuesta es probablemente correcta y útil, se prefiere si incluye alguna explicación junto con ella para explicar cómo ayuda a resolver el problema. Esto se vuelve especialmente útil en el futuro, si hay un cambio (posiblemente no relacionado) que hace que deje de funcionar y los usuarios necesitan entender cómo funcionó una vez. ¡Gracias!
Hatchet


2
String aString = "This will return the letter t";
System.out.println(aString.charAt(aString.length() - 1));

La salida debe ser:

t

¡Feliz codificación!


1
Este es exactamente el mismo ejemplo dado aquí stackoverflow.com/a/13025371/773479
John Veldboom

2

Aquí hay un método que uso para obtener el último xx de una cadena:

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;
    }
}

Luego úsalo así:

String testStr = "this is a test string";
String last1 = takeLast(testStr, 1); //Output: g
String last4 = takeLast(testStr, 4); //Output: ring

1
 public char lastChar(String s) {
     if (s == "" || s == null)
        return ' ';
    char lc = s.charAt(s.length() - 1);
    return lc;
}
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.