Android
 Computer >> コンピューター >  >> プログラミング >> Android

Androidで文字列内の各文字の出現回数をカウントする方法【サンプルコード付き】

この記事では、Androidで文字列内に各文字が何回出現するかをカウントする方法を、実際に動作するサンプルコードとともに解説します。EditTextに入力された文字列を解析し、HashMapを使って各文字の出現回数を集計してTextViewに表示する、シンプルなカウントアプリを作成していきましょう。

ステップ1:Android Studioで新規プロジェクトを作成する

まずは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:tools = "https://schemas.android.com/tools"
    android:layout_width = "match_parent"
    android:layout_height = "match_parent"
    tools:context = ".MainActivity"
    android:orientation = "vertical">
    <EditText
        android:id = "@+id/name"
        android:layout_width = "match_parent"
        android:hint = "Enter Name"
        android:layout_height = "wrap_content" />
    <LinearLayout
        android:layout_width = "wrap_content"
        android:layout_height = "wrap_content">
        <Button
            android:id = "@+id/save"
            android:text = "Save"
            android:layout_width = "wrap_content"
            android:layout_height = "wrap_content" />
    </LinearLayout>
    <TextView
        android:id = "@+id/textview"
        android:layout_width = "match_parent"
        android:layout_height = "match_parent" />
</LinearLayout>

このレイアウトでは、名前を入力するためのEditText、「Save」ボタン、そして結果を表示するTextViewを、縦方向(vertical)のLinearLayoutで配置しています。ユーザーがボタンをクリックすると、入力された文字列の中に各文字が何回含まれているかがチェックされ、その結果がTextViewに出力される仕組みです。

ステップ3:MainActivity.javaにコードを追加する

続いて、src/MainActivity.java を以下のように記述します。

package com.example.andy.myapplication;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Set;
public class MainActivity extends AppCompatActivity {
    EditText name;
    HashMap<Character,Integer> charCountMap;
    TextView textview;
    @Override
    protected void onCreate(Bundle readdInstanceState) {
        super.onCreate(readdInstanceState);
        setContentView(R.layout.activity_main);
        name = findViewById(R.id.name);
        textview = findViewById(R.id.textview);
        charCountMap = new HashMap<>();
        findViewById(R.id.save).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (!name.getText().toString().isEmpty()) {
                    char[] strArray = name.getText().toString().toCharArray();
                    for(char charItem:strArray) {
                        if(charCountMap.containsKey(charItem)) {
                            charCountMap.put(charItem,charCountMap.get(charItem)+1);
                        } else {
                            charCountMap.put(charItem,1);
                        }
                    }
                    textview.setText(charCountMap.toString());
                    Toast.makeText(MainActivity.this, "Inserted", Toast.LENGTH_LONG).show();
                } else {
                    name.setError("Enter NAME");
                }
            }
        });
    }
}

コードのポイント

文字数カウントの中核を担っているのは HashMap<Character, Integer> です。処理の流れを整理すると、以下のようになります。

  • toCharArray() で入力文字列をchar型の配列に変換する
  • 拡張for文で配列から1文字ずつ取り出す
  • HashMapにその文字がキーとして存在すればカウントを+1、存在しなければ1を新規登録する
  • 最後に toString() でマップの内容を文字列化し、TextViewにセットする

また、入力欄が空のままボタンが押された場合には setError() によってエラーメッセージが表示されるため、簡単な入力チェック(バリデーション)も組み込まれています。

さらに補足すると、Java 8以降では merge() メソッドを活用すれば、if文による分岐を charCountMap.merge(charItem, 1, Integer::sum); のたった1行で書き換えることも可能です。なお、本コードは旧サポートライブラリ(android.support.v7)を使用しているため、最新のAndroid Studio環境で動作させる場合は androidx.appcompat.app.AppCompatActivity への置き換えが必要になる点に注意してください。

アプリを実行して動作を確認する

それではアプリを起動してみましょう。ここでは、実機のAndroidスマートフォンをパソコンに接続している前提で説明を進めます。Android Studioでプロジェクト内のアクティビティファイルを開き、ツールバーの「Run」アイコンをクリックしてください。デバイス選択画面で接続中のモバイル端末を選ぶと、端末側にアプリの初期画面が表示されます。

Androidで文字列内の各文字の出現回数をカウントする方法【サンプルコード付き】

上記の実行結果のように、TextViewには「{a=2, b=1 …}」といった形式で、各文字とその出現回数が表示されます。例えば「hello」と入力すれば h=1、e=1、l=2、o=1 のように集計され、どの文字が何回使われているのかをひと目で確認できます。

  1. 【Android】アプリのランチャーに通知の件数(バッジ)を表示する方法

    Androidアプリのランチャーに通知件数(バッジ)を表示する方法このチュートリアルでは、Androidアプリのランチャー(ホーム画面のアプリアイコン)に通知の件数をバッジとして表示する方法を解説します。NotificationCompat.BuilderのsetNumber()メソッドとsetBadgeIconType()メソッドを組み合わせることで、未読通知の数をアプリアイコン上に表示できるようになります。手順1:新規プロジェクトの作成Android Studioで新しいプロジェクトを作成します。メニューから「File」⇒「New Project」を選択し、必要な項目をすべて入力してプロジ

  2. 【Excel】文字列内の文字・単語の出現回数をカウントする5つの方法

    このチュートリアルでは、Excelで特定の文字列やデータ範囲内に含まれる文字や単語の出現回数をカウントする方法を解説します。大量のデータが入力されたセルや範囲の中から、特定の文字が何回登場するのかを調べたい場面はよくあります。本記事では、そんな作業を効率化できる実用的な数式を5つご紹介します。 練習用ワークブックのダウンロード 本記事で使用している練習用ワークブックは、こちらからダウンロードできます。 Excelで文字列内の文字の出現回数を数える5つの方法 1. SUMPRODUCT関数とLEN関数で文字数の合計を求める 1つのセル内の文字数を知りたい場合は、LEN関数だけで十分です。し