Bir dizenin son karakterini nasıl edinebilirim?


181

Bir dizenin son karakterini nasıl edinebilirim?

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

2
Birlikte karışık birkaç sorunuz var. Genel olarak, evet, str.charAt(str.length() - 1)genellikle dizgideki son karakterdir; ancak str boş veya null olursa ne olacağını düşünün.
Vance Maverick

İyi çalışıyor. Ancak palidrome kontrol mantığı doğru gelmiyor, lütfen aldığınız hatanın ne olduğunu da belirtin.
Zimbabao

Yanıtlar:


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

Çıktı java Test abcdef:

last character: f

2
onu bir karakter olarak değil, bir dize olarak döndürür, ancak ikincisini nasıl yapacağınızı zaten biliyorsunuz ve ne yaptığınızdan emin değilim.
jcomeau_ictx

8
Dizeniz boşsa ne olur?
Danimarka Hanı

4
bu durumda bir istisna doğuracaktır. istemez misin?
jcomeau_ictx

Soru bir karakter ister - bu bir karakter uzunluğunda bir dize döndürür. Kullanmalı mıyım charAt()değilsubstring()
Andrew

1
Andrew, düzenlenmeden önce orijinal soruya tekrar bakarsanız, OP'nin charAt () işlevini zaten denediğini ve istediği şey olmadığını göreceksiniz. SO gibi wiki benzeri bir ortamla ilgili sorunlardan biri, sorular hareketli bir hedef ve bazen cevaplar aptalca görünebilir.
jcomeau_ictx

96

İşte bir yöntem String.charAt():

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

Ortaya çıkan çıktı last char = a.


1
karakter değerleri bir sayıdan oldukça farklı olduğundan ve matematik sonuçlarınız çalışmadığından, bir dize içindeki bir sayı üzerinde hesaplama yapmak istiyorsanız gerçekten dikkatli olun.
JesseBoyd

32

Diğer cevaplar çok fazla gereksiz metin ve kod içeriyor. Dizenin son karakterini almanın iki yolu:

kömür

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

sicim

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

32

Diğer cevaplar çok eksiksiz ve bir dizenin son karakterini bulmaya çalışıyorsanız bunları kesinlikle kullanmalısınız. Ancak yalnızca bir koşullu (örneğin son karakter 'g') kullanmaya çalışıyorsanız, aşağıdakileri de yapabilirsiniz:

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

veya, dizeler

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

Çok yararlı ve noktaya.
Aquarelle

4

Bunu dene:

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

Bu cevap yanlış. Sadece ilk ve son karakterlerin aynı olup olmadığını kontrol eder.
Aquarelle

2

Basit çözüm:

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

Bir karakter dizisi kullanma (boş boş String veya null String argümanına dikkat edin!)

Başka bir çözüm StringBuilder kullanır (bu genellikle String'in değişmez olduğu için String manupilation yapmak için kullanılır.

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

Yine başka bir yaklaşım (talimat için gerçek kullanımdan daha fazlası) budur:

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

Burada tüm dize ters çevrilir ve sonra ters çevrilmemesi gereken bölüm alt dize ile değiştirilir. ;)


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

Bu kod derlemek sanmıyorum (sadece olsa küçük düzeltmelere ihtiyacı var), bir kez derlemek olsun o çalışıp çalışmadığını görmek için boş bir dize üzerinde bir test vermek.
matem çanı

2
Bu cevap muhtemelen doğru ve yararlı olsa da , sorunun çözülmesine nasıl yardımcı olduğunu açıklamak için bununla birlikte bir açıklama eklemeniz tercih edilir . Bu, özellikle çalışmayı durdurmasına neden olan bir değişiklik varsa (muhtemelen ilgisiz) ve kullanıcıların bir zamanlar nasıl çalıştığını anlamaları gerekiyorsa, özellikle yararlı olur. Teşekkürler!
Hatchet


2
String aString = "This will return the letter t";
System.out.println(aString.charAt(aString.length() - 1));

Çıktı şöyle olmalıdır:

t

Mutlu kodlama!


1
Bu burada verilenle aynı örnektir stackoverflow.com/a/13025371/773479
John Veldboom

2

İşte bir dizenin son xx almak için kullandığım bir yöntem:

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

Sonra şöyle kullanın:

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;
}
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.