文字列の最後の文字を取得するにはどうすればよいですか?


181

文字列の最後の文字を取得するにはどうすればよいですか?

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

2
いくつかの質問が混在しています。大まかに言って、str.charAt(str.length() - 1)通常、文字列の最後の文字です。ただし、strが空またはnullの場合はどうなるかを検討してください。
Vance Maverick

正常に動作しています。ただし、パリドロームチェックのロジックは正しくありません。発生しているエラーの内容もお知らせください。
ジンババオ

回答:


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

質問は文字を要求します-これは1文字の長い文字列を返します。使用しcharAt()ないでくださいsubstring()
Andrew

1
アンドリュー、編集前の元の質問を振り返ると、OPがすでにcharAt()を試行していて、彼女が望んでいたものではなかったことがわかります。これは、SOなどのwikiのような媒体の問題の1つです。質問は動くターゲットであり、結果として結果がばかげているように見える場合があります。
jcomeau_ictx

96

以下が使用する方法String.charAt()です。

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

結果の出力はlast char = aです。


1
文字列内の数値を計算する場合は、文字の値がリテラルの数値とはかなり異なり、計算結果が機能しないため、注意が必要です。
JesseBoyd

32

他の回答には、多くの不要なテキストとコードが含まれています。文字列の最後の文字を取得するには、次の2つの方法があります。

チャー

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

ストリング

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

32

他の答えは非常に完全なので、文字列の最後の文字を見つけようとする場合は、必ずそれらを使用してください。ただし、条件を使用するだけの場合(たとえば、最後の文字「g」)、次のようにすることもできます。

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

または、文字列

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

非常に便利で要領があります。
アクアレル

4

これを試して:

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

この答えは間違っています。最初と最後の文字が同じかどうかを確認するだけです。
アクアレル

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自体が不変であるため、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;
}

このコードはコンパイルできないと思います(ただし、小さな修正のみが必要です)。コンパイルを取得したら、空の文字列をテストして、機能するかどうかを確認します。
Knells

2
この答えはおそらく正しいと便利ですが、問題の解決にどのように役立つかを説明するためにいくつかの説明含めることが望ましいです。これは、動作が停止する原因となる変更(おそらく無関係)があり、ユーザーが一度動作した方法を理解する必要がある場合、将来的に特に役立ちます。ありがとう!
ハチェット2016


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

出力は次のようになります。

t

幸せなコーディング!


1
これは、ここで与えられた、まったく同じ例であるstackoverflow.com/a/13025371/773479
ジョン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

1
 public char lastChar(String s) {
     if (s == "" || s == null)
        return ' ';
    char lc = s.charAt(s.length() - 1);
    return lc;
}
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.