Как получить последний символ строки?


181

Как получить последний символ строки?

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

2
У вас есть несколько вопросов, смешанных вместе. В общем, да, str.charAt(str.length() - 1)обычно это последний символ в строке; но подумайте, что произойдет, если str будет пустым или пустым.
Вэнс Мэверик

Работает нормально. Но логика проверки палидрома неверна, пожалуйста, также укажите, какую ошибку вы получаете.
Зимбабао

Ответы:


243

Код:

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

Выход из java Test abcdef:

last character: f

2
возвращает его в виде строки, а не символа, но вы уже знаете, как это сделать, и мне неясно, что вы ищете.
jcomeau_ictx

8
Что если ваша строка пуста?
датский хан

4
в этом случае возникнет исключение. ты не хочешь этого?
jcomeau_ictx

Вопрос запрашивает символ - это возвращает длинную строку из одного символа. Если использовать charAt()неsubstring()
Эндрю

1
Эндрю, если вы оглянетесь на исходный вопрос до того, как он был отредактирован, вы увидите, что ОП уже пробовал charAt (), и это было не то, что она хотела. Это одна из проблем с вики-подобной средой, такой как SO, вопросы являются движущейся целью, и иногда ответы могут выглядеть глупо.
jcomeau_ictx

96

Вот метод, использующий String.charAt():

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

В результате получается last char = a.


1
будьте очень осторожны, если вы хотите выполнить вычисление для числа в строке, так как значения символов сильно отличаются от литерального числа и ваши математические результаты не будут работать.
ДжессиБойд

32

Другие ответы содержат много ненужного текста и кода. Вот два способа получить последний символ строки:

голец

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

строка

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

32

Другие ответы очень полны, и вы обязательно должны их использовать, если вы пытаетесь найти последний символ строки. Но если вы просто пытаетесь использовать условное выражение (например, последний символ «g»), вы также можете сделать следующее:

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

или строки

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

Очень полезно и по существу.
Акварель

4

Попробуй это:

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

Этот ответ неверен. Он только проверяет, совпадают ли первый и последний символы.
Акварель

2

Простое решение:

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

Использование массива символов (обратите внимание на неприятный пустой аргумент String или null String!)

Другое решение использует StringBuilder (который обычно используется для выполнения String, поскольку сама String является неизменяемой.

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

Еще один подход (больше для обучения, чем для реального использования) заключается в следующем:

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

Здесь полная строка переворачивается, а затем часть, которая не должна быть обращена, заменяется подстрокой. ;)


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

Я не думаю, что этот код скомпилируется (хотя нужны только небольшие исправления), как только вы его скомпилируете, проведите тест на пустой строке, чтобы увидеть, работает ли он.
Звонит

2
Хотя этот ответ, вероятно, является правильным и полезным, желательно, чтобы вы включили вместе с ним какое-то объяснение, объясняющее, как оно помогает решить проблему. Это становится особенно полезным в будущем, если есть изменение (возможно, не связанное), которое заставляет его перестать работать, и пользователи должны понять, как это когда-то работало. Спасибо!
Топор


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

Вывод должен быть:

t

Удачного кодирования!


1
Это точно такой же пример, приведенный здесь stackoverflow.com/a/13025371/773479
Джон Вельдбом

2

Вот метод, который я использую, чтобы получить последний xx строки:

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

Тогда используйте это так:

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;
}
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.