Wie erhalte ich das letzte Zeichen einer Zeichenfolge?

181

Wie erhalte ich das letzte Zeichen einer Zeichenfolge?

public class Main
{
    public static void main(String[] args) 
    {
        String s = "test string";
        //char lastChar = ???
    }   
}
Lonesarah
quelle
2
Sie haben mehrere Fragen miteinander verwechselt. Im Allgemeinen ist ja str.charAt(str.length() - 1)normalerweise das letzte Zeichen in der Zeichenfolge. Aber überlegen Sie, was passiert, wenn str leer oder null ist.
Vance Maverick
Es funktioniert gut. Die Logik der Palidromprüfung klingt jedoch nicht korrekt. Bitte erwähnen Sie auch, welchen Fehler Sie erhalten.
Simbabao

Antworten:

243

Der Code:

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

Die Ausgabe von java Test abcdef:

last character: f
jcomeau_ictx
quelle
2
Gibt es als Zeichenfolge zurück, nicht als Zeichen, aber Sie wissen bereits, wie man Letzteres macht, und mir ist nicht klar, wonach Sie suchen.
jcomeau_ictx
8
Was ist, wenn Ihre Zeichenfolge leer ist?
Dänischer Khan
4
In diesem Fall wird eine Ausnahme ausgelöst. Würdest du es nicht wollen?
jcomeau_ictx
Frage fragt nach einem Zeichen - dies gibt eine ein Zeichen lange Zeichenfolge zurück. Sollte charAt()nicht verwendensubstring()
Andrew
1
Andrew, wenn Sie auf die ursprüngliche Frage zurückblicken, bevor sie bearbeitet wurde, werden Sie feststellen, dass das OP charAt () bereits ausprobiert hat und es nicht das war, was sie wollte. Das ist eines der Probleme mit einem Wiki-ähnlichen Medium wie SO. Die Fragen sind ein bewegliches Ziel und manchmal können die Antworten dadurch albern aussehen.
jcomeau_ictx
96

Hier ist eine Methode mit String.charAt():

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

Die resultierende Ausgabe ist last char = a.

Aniket
quelle
1
Seien Sie sehr vorsichtig, wenn Sie eine Berechnung für eine Zahl innerhalb einer Zeichenfolge durchführen möchten, da sich die Zeichenwerte erheblich von einer Literalzahl unterscheiden und Ihre mathematischen Ergebnisse nicht funktionieren.
JesseBoyd
32

Die anderen Antworten enthalten viel unnötigen Text und Code. Hier sind zwei Möglichkeiten, um das letzte Zeichen eines Strings zu erhalten:

verkohlen

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

String

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

Die anderen Antworten sind sehr vollständig und sollten auf jeden Fall verwendet werden, wenn Sie versuchen, das letzte Zeichen einer Zeichenfolge zu finden. Wenn Sie jedoch nur versuchen, eine Bedingung zu verwenden (z. B. das letzte Zeichen 'g'), können Sie auch Folgendes tun:

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

oder Strings

if (str.endsWith("bar")) {
Neil Chowdhury
quelle
Sehr nützlich und auf den Punkt.
Aquarelle
4

Versuche dies:

if (s.charAt(0) == s.charAt(s.length() - 1))
Bala R.
quelle
Diese Antwort ist falsch. Es wird nur geprüft, ob das erste und das letzte Zeichen identisch sind.
Aquarelle
2

Einfache Lösung ist:

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

Verwenden eines Zeichenarrays (achten Sie auf das böse leere String- oder Null-String-Argument!)

Eine andere Lösung verwendet StringBuilder (der normalerweise zur String-Manupilation verwendet wird, da String selbst unveränderlich ist.

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

Ein weiterer Ansatz (mehr für den Unterricht als für den tatsächlichen Gebrauch) ist dieser:

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

Hier wird die gesamte Zeichenfolge umgekehrt und dann der Teil, der nicht umgekehrt werden soll, durch die Teilzeichenfolge ersetzt. ;)

Yoko Zunna
quelle
2
public String lastChars(String a) {
if(a.length()>=1{
String str1 =a.substring(b.length()-1);
}
return str1;
}
Abdul Hanan Khan
quelle
Ich glaube nicht, dass dieser Code kompiliert wird (benötigt aber nur kleine Korrekturen). Sobald Sie ihn kompiliert haben, testen Sie ihn an einer leeren Zeichenfolge, um zu sehen, ob er funktioniert.
Knells
2
Obwohl diese Antwort wahrscheinlich richtig und nützlich ist, wird sie bevorzugt, wenn Sie eine Erklärung hinzufügen, um zu erklären, wie sie zur Lösung des Problems beiträgt. Dies ist besonders in Zukunft nützlich, wenn eine Änderung (möglicherweise ohne Bezug) dazu führt, dass sie nicht mehr funktioniert und die Benutzer verstehen müssen, wie sie einmal funktioniert hat. Vielen Dank!
Beil
2
public char LastChar(String a){
    return a.charAt(a.length() - 1);
}
Vijay Pandey
quelle
2
String aString = "This will return the letter t";
System.out.println(aString.charAt(aString.length() - 1));

Die Ausgabe sollte sein:

t

Viel Spaß beim Codieren!


quelle
1
Dies ist genau das gleiche Beispiel hier stackoverflow.com/a/13025371/773479
John Veldboom
1
 public char lastChar(String s) {
     if (s == "" || s == null)
        return ' ';
    char lc = s.charAt(s.length() - 1);
    return lc;
}
Rakib
quelle
1

Hier ist eine Methode, mit der ich das letzte xx eines Strings erhalte:

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

Dann benutze es so:

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