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 = ???
    }   
}

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

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.


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

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")) {

Sehr nützlich und auf den Punkt.
Aquarelle

4

Versuche dies:

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

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


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

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
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!


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

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
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.