Android TextViewでlastIndexOf()を使う方法をわかりやすく解説
この記事では、Androidアプリ開発においてTextViewと組み合わせてlastIndexOf()メソッドを使用する方法を、具体的なサンプルコードとともに解説します。
lastIndexOf()メソッドとは
lastIndexOf()は、JavaのStringクラスが提供するメソッドの一つで、指定した文字列(または文字)が対象の文字列内で最後に出現する位置(インデックス)を返します。先頭から検索するindexOf()とは異なり、末尾側から検索を行うのが特徴です。なお、文字列が見つからなかった場合は「-1」が返されます。
作成するサンプルアプリの概要
今回作成するアプリは、以下のような流れで動作します。
- EditTextに任意の文字列を入力する
- ボタンをタップすると、入力された文字列から「sai」という文字列を検索
- 「sai」が最後に現れるインデックス番号をTextViewに表示する
実装手順
ステップ1: 新規プロジェクトの作成
まず、Android Studioで新しいプロジェクトを作成します。メニューから「File」⇒「New Project」を選択し、必要な項目をすべて入力してプロジェクトを作成しましょう。
ステップ2: レイアウトファイル(activity_main.xml)の編集
次に、res/layout/activity_main.xmlに以下のコードを追加します。
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="https://schemas.android.com/apk/res/android" xmlns:app="https://schemas.android.com/apk/res-auto" xmlns:tools="https://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" android:gravity="center" tools:context=".MainActivity"> <EditText android:id="@+id/name" android:layout_width="match_parent" android:hint="Enter name" android:layout_height="wrap_content" /> <Button android:id="@+id/click" android:text="Click" android:layout_width="wrap_content" android:layout_height="wrap_content" /> <TextView android:id="@+id/textview" android:layout_width="wrap_content" android:textSize="25sp" android:layout_height="wrap_content" /> </LinearLayout>
上記のコードでは、名前を入力するためのEditText、クリック用のButton、そして結果を表示するTextViewを、垂直方向のLinearLayoutの中に配置しています。ユーザーがボタンをクリックすると、EditTextに入力されたデータを取得し、「sai」が最後に出現するインデックスを計算してTextViewに表示する仕組みです。
ステップ3: MainActivity.javaの編集
続いて、src/MainActivity.javaに以下のコードを記述します。
package com.example.myapplication;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
public class MainActivity extends AppCompatActivity {
EditText name;
Button button;
TextView text;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
name = findViewById(R.id.name);
button = findViewById(R.id.click);
text = findViewById(R.id.textview);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (!name.getText().toString().isEmpty()) {
if (name.getText().toString().length() >= 0) {
int index = name.getText().toString().lastIndexOf("sai");
text.setText(String.valueOf(index));
}
} else {
name.setError("Plz enter name");
}
}
});
}
}
コードのポイント
- 空チェック: isEmpty()で入力欄が空でないかを確認し、空の場合はsetError()でエラーメッセージを表示します。
- lastIndexOf()の呼び出し: 入力された文字列に対してlastIndexOf("sai")を実行し、「sai」が最後に出現する位置をint型で取得します。
- 結果の表示: String.valueOf()で数値を文字列に変換し、TextViewにセットしています。
なお、このサンプルは旧supportライブラリ(android.support.v7.app.AppCompatActivity)を使用しています。最近のAndroid Studioで新規プロジェクトを作成した場合は、androidx.appcompat.app.AppCompatActivityに読み替えて実装してください。
アプリの実行と動作確認
それではアプリケーションを実行してみましょう。ここでは、実際のAndroid端末をPCに接続しているものとして説明します。Android Studioからアプリを起動するには、プロジェクト内のいずれかのアクティビティファイルを開き、ツールバーのRun(実行)アイコンをクリックします。表示された候補から接続済みのモバイルデバイスを選択すると、端末上でアプリが起動し、次のような初期画面が表示されます。

上記の実行結果では、入力欄に「Krishna sai sai」という文字列を入力してボタンをクリックしています。「sai」という文字列は文中に2箇所出現しますが、lastIndexOf()は末尾側から検索を行うため、最後の「sai」が始まる位置である「12」がインデックスとして返されました。
まとめ
lastIndexOf()を使えば、文字列の中から特定のキーワードが最後に現れる位置を簡単に取得できます。ログ解析やファイルパスの処理など、末尾側の位置が必要になる場面で活躍するメソッドなので、ぜひ使い方をマスターしておきましょう。
-
【Android】CopyOnWriteArrayListでlastIndexOf()を使う方法をサンプルコード付きで解説
CopyOnWriteArrayListとは?例を始める前に、CopyOnWriteArrayListについて簡単におさらいしておきましょう。CopyOnWriteArrayListは、ArrayListのスレッドセーフな派生クラスです。addやsetなど要素を変更する操作が呼び出されると、内部で保持している配列を新しくコピーしてから更新を行う仕組みになっています。そのため、マルチスレッド環境でも反復処理中にConcurrentModificationExceptionが発生することなく、安全にリストを扱えるのが大きな特徴です。本記事では、AndroidのCopyOnWriteArrayLis
-
【Android】ButterKnifeの使い方をサンプルコード付きで徹底解説!
この記事では、Androidアプリ開発で定番だったアノテーションライブラリ「ButterKnife」の使い方を、実際にサンプルプロジェクトを動かしながらステップごとに解説します。 ButterKnifeとは? ButterKnifeは、Jake Wharton氏が開発したAndroid向けのビューインジェクションライブラリです。従来のようにfindViewById()でビューを1つずつ取得する代わりに、@BindViewアノテーションをフィールドに付けるだけで、対応するビューが自動的に注入されます。ボイラープレートコードが減り、Activityのコードがすっきりと読みやすくなるのが大きなメリ