ฉันจะรับอักขระตัวสุดท้ายของสตริงได้อย่างไร


181

ฉันจะรับอักขระตัวสุดท้ายของสตริงได้อย่างไร

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

2
คุณมีคำถามหลายข้อปะปนกัน โดยทั่วไปใช่str.charAt(str.length() - 1)เป็นอักขระตัวสุดท้ายในสตริง แต่ให้พิจารณาว่าจะเกิดอะไรขึ้นถ้า str ว่างเปล่าหรือว่างเปล่า
Vance Maverick

มันทำงานได้ดี แต่ตรรกะของการตรวจสอบ palidrome ไม่ถูกต้องกรุณาพูดถึงสิ่งที่เป็นข้อผิดพลาดที่คุณได้รับ
ซิมบับเว

คำตอบ:


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
แอนดรูถ้าคุณมองย้อนกลับไปที่คำถามดั้งเดิมก่อนที่จะถูกแก้ไขคุณจะเห็นว่า OP ได้ลอง charAt () แล้วและไม่ใช่สิ่งที่เธอต้องการ นั่นเป็นหนึ่งในปัญหาของสื่อที่คล้ายวิกิเช่น SO คำถามนั้นเป็นเป้าหมายที่เคลื่อนไหวและบางครั้งคำตอบก็อาจดูไร้สาระได้
jcomeau_ictx

96

นี่คือวิธีการใช้String.charAt():

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

last char = aส่งผลให้การส่งออกเป็น


1
ระวังให้ดีถ้าคุณต้องการคำนวณจำนวนภายในสตริงเนื่องจากค่าถ่านนั้นแตกต่างจากตัวเลขจริงและผลลัพธ์ทางคณิตศาสตร์ของคุณจะไม่ทำงาน
JesseBoyd

32

คำตอบอื่น ๆ ประกอบด้วยข้อความและรหัสที่ไม่จำเป็นจำนวนมาก ต่อไปนี้เป็นสองวิธีในการรับอักขระตัวสุดท้ายของ String:

ถ่าน

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

เชือก

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

32

คำตอบอื่น ๆ นั้นสมบูรณ์มากและคุณควรใช้พวกเขาอย่างแน่นอนหากคุณพยายามค้นหาตัวอักษรตัวสุดท้ายของสตริง แต่ถ้าคุณเพียงแค่พยายามใช้เงื่อนไข (เช่นเป็นอักขระตัวสุดท้าย 'g') คุณสามารถทำสิ่งต่อไปนี้ได้:

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

หรือสตริง

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

มีประโยชน์มากและตรงประเด็น
Aquarelle

4

ลองสิ่งนี้:

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

คำตอบนี้ผิด มันจะตรวจสอบเพื่อดูว่าตัวอักษรตัวแรกและตัวสุดท้ายเหมือนกันหรือไม่
Aquarelle

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

ใช้อาเรย์ตัวละคร (ระวังสตริงที่ว่างเปล่าที่น่ารังเกียจหรืออาร์กิวเมนต์สตริง null!)

โซลูชันอื่นใช้ 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
John 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

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.