Jak uzyskać ostatni znak ciągu?

181

Jak uzyskać ostatni znak ciągu?

public class Main
{
    public static void main(String[] args) 
    {
        String s = "test string";
        //char lastChar = ???
    }   
}
lonesarah
źródło
2
Masz kilka pomieszanych pytań. Zasadniczo tak, str.charAt(str.length() - 1)jest zwykle ostatnim znakiem w ciągu; ale zastanów się, co się stanie, jeśli str jest pusty lub zerowy.
Vance Maverick
Działa dobrze. Ale logika kontroli palidromu nie brzmi poprawnie, proszę również wspomnieć o tym, jaki błąd się pojawia.
Zimbabao
możliwy duplikat Jak usunąć ostatni znak z ciągu?
Nateowami

Odpowiedzi:

243

Kod:

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

Wyjście java Test abcdef:

last character: f
jcomeau_ictx
źródło
2
zwraca go jako ciąg, a nie znak, ale już wiesz, jak to zrobić, i nie jestem pewien, czego szukasz.
jcomeau_ictx
8
Co jeśli twój ciąg jest pusty?
duński Khan
4
w takim przypadku powstanie wyjątek. nie chciałbyś tego?
jcomeau_ictx
Pytanie wymaga znaku - zwraca łańcuch o długości jednego znaku. Należy używać charAt()niesubstring()
Andrew
1
Andrew, jeśli spojrzysz na oryginalne pytanie przed jego edycją, zobaczysz, że OP już wypróbował charAt () i nie było to, czego chciała. To jeden z problemów z medium typu wiki, takim jak SO, pytania są ruchomym celem, a czasem odpowiedzi mogą wyglądać głupio.
jcomeau_ictx
96

Oto metoda wykorzystująca String.charAt():

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

Wynikowy wynik to last char = a.

Aniket
źródło
1
bądź bardzo ostrożny, jeśli chcesz wykonać obliczenia na liczbie w ciągu, ponieważ wartości char są zupełnie inne niż liczba literalna, a wyniki matematyczne nie będą działać.
JesseBoyd
32

Pozostałe odpowiedzi zawierają wiele niepotrzebnego tekstu i kodu. Oto dwa sposoby uzyskania ostatniego znaku ciągu:

zwęglać

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

Strunowy

String lastChar = myString.substring(myString.length() - 1);
Suragch
źródło
32

Pozostałe odpowiedzi są bardzo kompletne i zdecydowanie powinieneś ich użyć, jeśli próbujesz znaleźć ostatni znak ciągu. Ale jeśli próbujesz użyć warunkowego (np. To ostatni znak „g”), możesz również wykonać następujące czynności:

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

lub struny

if (str.endsWith("bar")) {
Neil Chowdhury
źródło
Bardzo przydatne i na temat.
Aquarelle
4

Spróbuj tego:

if (s.charAt(0) == s.charAt(s.length() - 1))
Bala R.
źródło
Ta odpowiedź jest zła. Sprawdza tylko, czy pierwszy i ostatni znak są takie same.
Aquarelle
2

Proste rozwiązanie to:

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

Używanie tablicy znaków (uważaj na paskudny pusty argument String lub null String!)

Inne rozwiązanie wykorzystuje StringBuilder (zwykle używany do manupilacji String, ponieważ sam String jest niezmienny.

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

Jeszcze inne podejście (bardziej do instrukcji niż do faktycznego użycia) to:

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

Tutaj cały ciąg znaków jest odwracany, a następnie część, której nie należy odwracać, jest zastępowana podciągiem. ;)

Yoko Zunna
źródło
2
public String lastChars(String a) {
if(a.length()>=1{
String str1 =a.substring(b.length()-1);
}
return str1;
}
Abdul Hanan Khan
źródło
Nie sądzę, że ten kod się skompiluje (wymaga tylko drobnych poprawek), gdy tylko go skompilujesz, daj mu test na pustym ciągu, aby sprawdzić, czy działa.
Knells,
2
Chociaż ta odpowiedź jest prawdopodobnie poprawna i przydatna, najlepiej jest dołączyć wraz z nią wyjaśnienie wyjaśniające, w jaki sposób pomaga rozwiązać problem. Staje się to szczególnie przydatne w przyszłości, jeśli nastąpi zmiana (prawdopodobnie niezwiązana), która spowoduje, że przestanie ona działać, a użytkownicy będą musieli zrozumieć, jak kiedyś działała. Dzięki!
Hatchet
2
public char LastChar(String a){
    return a.charAt(a.length() - 1);
}
Vijay Pandey
źródło
2
String aString = "This will return the letter t";
System.out.println(aString.charAt(aString.length() - 1));

Dane wyjściowe powinny wynosić:

t

Miłego kodowania!


źródło
1
Dokładnie taki sam przykład podano tutaj stackoverflow.com/a/13025371/773479
John Veldboom
2

Oto metoda, której używam do uzyskania ostatniego xx ciągu:

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

Następnie użyj go w następujący sposób:

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