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

【Android】EditTextの値がアナグラムかどうかを判定し、出現回数をカウントする方法

このチュートリアルでは、AndroidアプリでEditText(編集テキスト)に入力された2つの文字列がアナグラムかどうかを判定し、さらに指定した文字列の中にアナグラムが何回出現するかをカウントして結果を表示する方法を解説します。

アナグラムとは

アナグラムとは、使用する文字とその個数が完全に一致している別の文字列のことを指します。たとえば「listen」と「silent」のように、文字の並び順を入れ替えるだけで互いに変換できる関係です。本記事では、この判定ロジックをAndroidアプリ上でどのように実装するのかを、手順を追って見ていきましょう。

実装手順

ステップ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:gravity="center"
    android:layout_height="match_parent"
    tools:context=".MainActivity"
    android:orientation="vertical">
    <EditText
        android:id="@+id/edit_query"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />
    <EditText
        android:id="@+id/edit_query1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />
    <Button
        android:id="@+id/buttonPanel"
        android:text="Button"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"></Button>
</LinearLayout>

上記のコードでは、ユーザーから文字列を受け取るためのEditTextを2つ配置しています。ボタンがタップされると、入力された値をもとにアナグラムの判定と出現回数のカウントが行われ、その結果がToastとして画面に表示されます。

ステップ3:MainActivity.java の実装

src/MainActivity.java に以下のコードを追加します。

package com.example.myapplication;

import android.os.Build;
import android.os.Bundle;
import android.support.annotation.RequiresApi;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.View;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;

import java.util.ArrayList;

public class MainActivity extends AppCompatActivity {
    EditText edit_query1,edit_query;
    String first,second;

    @RequiresApi(api = Build.VERSION_CODES.P)
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        edit_query1 = findViewById(R.id.edit_query1);
        edit_query = findViewById(R.id.edit_query);

        findViewById(R.id.buttonPanel).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if(!edit_query.getText().toString().isEmpty() && !edit_query1.getText().toString().isEmpty()) {
                    first = edit_query.getText().toString().trim();
                    second = edit_query1.getText().toString().trim();
                }
                if(araAnagram(first,second)) {
                    countAnagrams(second,"for");
                }
            }
        });
    }

    private void countAnagrams(String first, String rea) {
        int res = 0;
        String s = null;
        int N = first.length();
        int n = rea.length();
        for (int i = 0; i <= N - n; i++) {
            s = first.substring(i, i + n);
            if (araAnagram(rea.trim(), s)) {
                res++;
            }
        }
        Toast.makeText(MainActivity.this,""+res,Toast.LENGTH_LONG).show();
    }

    private boolean araAnagram(String first, String second) {
        boolean value=false;
        char[] firstchar = first.toCharArray();
        char[] secondchar = second.toCharArray();
        for(int i = 0; i<firstchar.length;i++) {
            for (int j = 0; j < secondchar.length; j++) {
                if (firstchar[i] == secondchar[j]) {
                value = true;
            }
            }
        }
        return value;
    }
}

コードのポイント

  • araAnagram():2つの文字列をそれぞれchar型配列に変換し、二重ループで全文字を比較することでアナグラムかどうかを判定します。
  • countAnagrams():対象となる文字列から、検索語と同じ長さの部分文字列を先頭から順に切り出し、それぞれがアナグラムであればカウントを増やしていきます。
  • onClick():両方のEditTextが空でない場合にのみ処理を実行し、判定結果と出現回数をToastで通知します。

アプリの実行方法

それでは、アプリケーションを実際に動かしてみましょう。ここでは、実機のAndroid端末がパソコンに接続されているものとして説明します。Android Studioでプロジェクト内のアクティビティファイルを開き、ツールバーにある実行アイコンをクリックしてください。候補から自分のモバイルデバイスを選択すると、端末に以下のようなデフォルト画面が表示されます。

【Android】EditTextの値がアナグラムかどうかを判定し、出現回数をカウントする方法

  1. 【Android】SharedPreferencesで値を保存・読み取り・編集する方法を徹底解説

    SharedPreferencesとは? SharedPreferencesは、Androidアプリでキーと値(Key-Value)のペア形式の小さなデータを永続的に保存するための仕組みです。ユーザー名やメールアドレスなどの設定情報、ログイン状態、前回起動時の状態など、SQLiteデータベースを用意するまでもない軽量なデータの保存に最適で、多くのアプリで広く利用されています。 本記事では、実際に動作するサンプルコードをもとに、SharedPreferencesで値を「保存」「読み取り」「編集(クリア)」する方法をステップごとに解説します。 ステップ1:新規プロジェクトを作成する Android

  2. Androidでコピー&ペーストを使う方法|テキスト・リンク・切り取り操作を徹底解説

    カット/コピー&ペーストを発明したラリー・テスラー氏に、世界は永遠に感謝すべきでしょう。シンプルでありながら不可欠なこの機能は、コンピューティングに欠かせない存在です。コピー&ペーストのないデジタルの世界など想像できません。同じメッセージを何度も入力するのはストレスですし、コピー&ペーストなしで複数のデジタルデータを作成するのはほぼ不可能でしょう。 時代とともに、スマートフォンは日常的なテキスト入力の主役となりました。そのため、AndroidやiOSなどモバイルOSにコピー&ペースト機能がなければ、日々の作業は成り立ちません。 本記事では、テキストをある場所から別の場所へコピー&ペーストするさ