Як отримати останній символ рядка?


181

Як отримати останній символ рядка?

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

2
У вас є кілька питань, змішаних разом. Загалом, так, str.charAt(str.length() - 1)зазвичай це останній символ у рядку; але врахуйте, що станеться, якщо str порожній або null.
— Vance Maverick

Його добре працює. Але логіка перевірки на парадром не здається правильною, також, будь ласка, зазначте, яка помилка ви отримуєте.
— Зімбабао

Відповіді:


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
будьте дуже обережні, якщо ви хочете зробити обчислення числа в рядку, оскільки значення char зовсім інші, ніж буквальне число, і ваші математичні результати не будуть працювати.
— JesseBoyd

32

Інші відповіді містять багато непотрібного тексту та коду. Ось два способи отримати останній символ рядка:

char

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 або нульовим аргументом String!)

В іншому рішенні використовується StringBuilder (який зазвичай використовується для обробки 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
— Джон Veldboom

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.