【Android】文字列の中で最初の繰り返しのない文字を見つける方法
はじめに
この記事では、Androidアプリにおいて、指定された文字列の中から最初の繰り返しのない(重複していない)文字を見つける方法を解説します。
この処理の鍵となるのが LinkedHashMap です。LinkedHashMap は要素を挿入した順序を保持する特性があるため、各文字の出現回数をカウントした後も、元の文字列と同じ順序で走査できます。これにより、「最初に一度だけ出現する文字」を正確に特定できます。
ここでは例として、文字列 tutorialspoint を使用します。この場合、最初の繰り返しのない文字は「u」になります。
手順1:新規プロジェクトの作成
まず、Android Studioで新しいプロジェクトを作成します。メニューから [File] → [New Project] を選択し、必要な項目をすべて入力してプロジェクトを作成してください。
手順2:レイアウトファイルの編集
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:gravity="center" android:layout_height="match_parent" tools:context=".MainActivity"> <TextView android:id="@+id/text" android:textSize="30sp" android:layout_width="match_parent" android:layout_height="match_parent" /> </LinearLayout>
上記のコードでは、検出した最初の繰り返しのない文字を画面に表示するための TextView を配置しています。
手順3:MainActivity.java の実装
src/MainActivity.java に以下のコードを追加します。
package com.example.myapplication;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.widget.TextView;
import java.util.ArrayList;
import java.util.LinkedHashMap;
public class MainActivity extends AppCompatActivity {
String str = "tutorialspoint";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// 挿入順序を保持する LinkedHashMap で各文字の出現回数をカウント
LinkedHashMap<Character, Integer> hashMap = new LinkedHashMap<>();
char[] chars = str.toCharArray();
for (int i = 0; i < chars.length; i++) {
if (hashMap.containsKey(chars[i])) {
hashMap.put(chars[i], hashMap.get(chars[i]) + 1);
} else {
hashMap.put(chars[i], 1);
}
}
// 出現回数が1回だけの文字をリストに抽出
ArrayList<String> values = new ArrayList<>();
for (Character name : hashMap.keySet()) {
if (hashMap.get(name) == 1) {
values.add(name.toString());
}
}
// 最初の繰り返しのない文字を TextView に表示
TextView textView = findViewById(R.id.text);
textView.setText(values.get(0));
}
}
コードの解説
- 文字列を
toCharArray()で1文字ずつ分解し、LinkedHashMapに各文字の出現回数を登録していきます。既にキーが存在する場合はカウントを1増やします。 - 次にマップを先頭から走査し、値が 1 の文字だけをリストに追加します。
LinkedHashMapのおかげで、このリストは文字列中の出現順に並んでいます。 - 最後にリストの先頭要素(
values.get(0))を取得すれば、それが求める「最初の繰り返しのない文字」です。
アプリの実行
それでは、アプリケーションを実行してみましょう。実際のAndroid端末をパソコンに接続しておいてください。Android Studioからアプリを実行するには、プロジェクト内のいずれかのアクティビティファイルを開き、ツールバーの [Run] アイコン
をクリックします。実行対象として接続したモバイルデバイスを選択すると、端末の画面に以下のような結果が表示されます。

文字列 tutorialspoint の場合、画面には最初の繰り返しのない文字である u が表示されます。
まとめ
LinkedHashMap を使えば、挿入順序を保ちながら各文字の出現回数を管理でき、わずかなコード量で「最初の繰り返しのない文字」を効率的に検出できます。面接試験などでも頻出の定番アルゴリズムなので、ぜひ覚えておきましょう。
-
【Android】文字列配列から重複する共通文字を削除し、一意の文字だけを抽出する方法
はじめに この記事では、Androidアプリ開発において、文字列配列の要素から重複する(共通の)部分を取り除き、一意な文字だけを抽出して画面に表示する方法を解説します。サンプルコードでは、まず配列内の重複した文字列をHashMapとHashSetを使って整理し、続いて各文字列を構成する文字の中から重複を排除した文字の一覧を作成します。 手順1:Android Studioで新規プロジェクトを作成する Android Studioを起動し、メニューから「File → New Project」を選択します。必要な項目をすべて入力して、新しいプロジェクトを作成してください。 手順2:レイアウトフ
-
Androidで画像をBase64文字列に変換する方法をステップごとに解説
はじめに この記事では、Androidアプリで画像をBase64文字列に変換する方法を、実際のサンプルコードとともにステップ形式で解説します。 Base64とは、バイナリデータ(画像など)をテキスト形式の文字列として扱えるようにするエンコード方式です。画像データをWeb API経由で送受信したり、JSONに含めて保存したりする際によく利用されます。 実装手順 ステップ1:新規プロジェクトを作成する Android Studioを起動し、「File」→「New Project」を選択して新しいプロジェクトを作成します。必要な項目をすべて入力してプロジェクトをセットアップしましょう。 ステップ2: