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


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.