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

【Android】文字列配列から重複する共通文字を削除し、一意の文字だけを抽出する方法

はじめに

この記事では、Androidアプリ開発において、文字列配列の要素から重複する(共通の)部分を取り除き、一意な文字だけを抽出して画面に表示する方法を解説します。サンプルコードでは、まず配列内の重複した文字列をHashMapHashSetを使って整理し、続いて各文字列を構成する文字の中から重複を排除した文字の一覧を作成します。

手順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: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:gravity="center"
    tools:context=".MainActivity">

    <TextView
        android:id="@+id/text"
        android:textSize="30sp"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />
</LinearLayout>

上記のコードでは、処理結果(共通文字を取り除いた配列の内容)を画面に表示するためのTextViewを1つ配置しています。

手順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.widget.TextView;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;

public class MainActivity extends AppCompatActivity {

    String[] strArray = {"aaa", "aaa", "bbb", "ccc", "bbb"};

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

        // ステップ1:各文字列の出現回数をカウント
        HashMap<String, Integer> hashMap = new HashMap<>();
        for (int i = 0; i < strArray.length; i++) {
            if (hashMap.containsKey(strArray[i])) {
                hashMap.put(strArray[i], hashMap.get(strArray[i]) + 1);
            } else {
                hashMap.put(strArray[i], 1);
            }
        }

        // ステップ2:重複しない文字列だけをHashSetに格納
        HashSet<String> hashSet = new HashSet<>(hashMap.keySet());

        // ステップ3:文字単位でも重複を除去
        HashMap<Character, Integer> charCount = new HashMap<>();
        HashSet<String> resultSet = new HashSet<>();
        List<String> list = new ArrayList<>(hashSet);

        for (String name : list) {
            char[] chars = name.toCharArray();
            for (char c : chars) {
                if (charCount.containsKey(c)) {
                    charCount.put(c, charCount.get(c) + 1);
                } else {
                    charCount.put(c, 1);
                }
            }
        }
        for (Character c : charCount.keySet()) {
            resultSet.add(c.toString());
        }

        // ステップ4:結果をTextViewに表示
        TextView textView = findViewById(R.id.text);
        textView.setText(resultSet.toString());
    }
}

このコードの処理の流れは以下のとおりです。

  • 重複文字列の除去: HashMapで各文字列の出現回数をカウントし、keySet()から重複のない文字列(aaa、bbb、ccc)をHashSetに格納します。
  • 文字単位での重複除去: 各文字列をtoCharArray()で文字配列に分解し、HashMapHashSetを組み合わせて重複しない文字だけを収集します。
  • 結果の表示: 最終的な文字セットをsetText()でTextViewに表示します。

アプリを実行して結果を確認する

それではアプリを実行してみましょう。あらかじめ実機のAndroid端末をパソコンに接続しておいてください。Android Studioでプロジェクト内のアクティビティファイルを開き、ツールバーの「Run」アイコンをクリックします。デバイスとして自分のスマートフォンを選択すると、端末の画面に以下のように重複を除いた一意な文字の一覧が表示されます。

【Android】文字列配列から重複する共通文字を削除し、一意の文字だけを抽出する方法

  1. AndroidでArrayBlockingQueueから要素を削除する方法を解説!サンプルコード付き

    本記事では、Androidアプリ開発においてArrayBlockingQueueから特定の要素を削除する方法を、実際のサンプルコードとともにわかりやすく解説します。 ArrayBlockingQueueとは? 実装手順に入る前に、ArrayBlockingQueueについて簡単におさらいしておきましょう。ArrayBlockingQueueは、内部に配列を持つスレッドセーフなブロッキングキューで、要素はFIFO(First In First Out:先入れ先出し)方式で管理されます。つまり、最初に追加された要素が最も長くキューに残り、最後に追加された要素が最も短い期間しか残りません。 実装

  2. Androidからマルウェアを削除する方法|感染の兆候と予防策を徹底解説

    現代社会において、スマートフォンは生活に欠かせない存在となっています。銀行アプリ、ナビゲーションアプリ、各種ユーティリティアプリなど、個人の重要な情報や機能がほぼすべて詰まっています。だからこそ、プライバシーを守るためにも、スマートフォンをしっかりと保護することが何よりも重要です。パソコンと同様に、Androidスマートフォンもウイルス、トロイの木馬、スパイウェア、アドウェアなどの悪意あるプログラム(マルウェア)に感染する可能性があります。Androidマルウェアの主な目的は、機密情報の窃取、無関係な広告の表示によるユーザーの誤誘導、悪質なサイトへのリダイレクトなどです。マルウェアはさまざまな