Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Android

Cách xóa ký tự chung khỏi các phần tử mảng chuỗi Android

Giới thiệu

Ví dụ này minh họa cách tìm và loại bỏ các ký tự chung (common characters) xuất hiện trong tất cả các phần tử của mảng chuỗi trong Android.

Bước 1: Tạo dự án mới

Mở Android Studio, chọn File → New Project và điền đầy đủ thông tin cần thiết.

Bước 2: Thiết kế giao diện (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:layout_width="match_parent"
        android:layout_height="match_parent"
        android:textSize="30sp"
        android:gravity="center"
        android:padding="16dp" />

</LinearLayout>

Bước 3: MainActivity.java

package com.example.myapplication;

import android.os.Bundle;
import android.widget.TextView;
import androidx.appcompat.app.AppCompatActivity;
import java.util.HashSet;
import java.util.Set;

public class MainActivity extends AppCompatActivity {

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

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        // Bước 1: Lấy tập hợp các chuỗi duy nhất
        Set uniqueStrings = new HashSet<>();
        for (String s : strArray) {
            uniqueStrings.add(s);
        }
        // uniqueStrings = {"aaa", "bbb", "ccc"}

        // Bước 2: Tìm ký tự chung trong TẤT CẢ chuỗi duy nhất
        Set commonChars = null;
        for (String s : uniqueStrings) {
            Set charSet = new HashSet<>();
            for (char c : s.toCharArray()) {
                charSet.add(c);
            }
            // charSet của "aaa" = {'a'}, "bbb" = {'b'}, "ccc" = {'c'}
            
            if (commonChars == null) {
                commonChars = charSet; // Khởi tạo với chuỗi đầu tiên
            } else {
                commonChars.retainAll(charSet); // Giao nhau (intersection)
            }
        }
        // commonChars = {} (rỗng) vì không có ký tự nào chung giữa 'a', 'b', 'c'

        // Bước 3: Xóa ký tự chung khỏi từng chuỗi (nếu có)
        Set result = new HashSet<>();
        for (String s : uniqueStrings) {
            StringBuilder sb = new StringBuilder();
            for (char c : s.toCharArray()) {
                if (commonChars == null || !commonChars.contains(c)) {
                    sb.append(c);
                }
            }
            // Loại bỏ trùng lặp ký tự trong kết quả (tuỳ chọn)
            result.add(removeDuplicates(sb.toString()));
        }

        TextView textView = findViewById(R.id.text);
        textView.setText("Mảng gốc: [aaa, aaa, bbb, ccc, bbb]\n\n" +
            "Chuỗi duy nhất: " + uniqueStrings + "\n\n" +
            "Ký tự chung (intersection): " + commonChars + "\n\n" +
            "Kết quả sau xóa ký tự chung: " + result);
    }

    // Helper: loại bỏ ký tự trùng lặp trong chuỗi, giữ thứ tự
    private String removeDuplicates(String s) {
        StringBuilder sb = new StringBuilder();
        Set seen = new HashSet<>();
        for (char c : s.toCharArray()) {
            if (seen.add(c)) sb.append(c);
        }
        return sb.toString();
    }
}

Chạy ứng dụng

Kết nối thiết bị Android thật với máy tính. Trong Android Studio, nhấn Run và chọn thiết bị để chạy.

Kết quả

Mảng gốc: [aaa, aaa, bbb, ccc, bbb]

Chuỗi duy nhất: {aaa, bbb, ccc}

Ký tự chung: [] (rỗng - vì 'a', 'b', 'c' không chung nhau)

Kết quả: {a, b, c} (giữ nguyên vì không có ký tự chung để xóa)

Ví dụ có ký tự chung

Nếu mảng: ["abc", "bcd", "cde"]

  • Chuỗi duy nhất: {"abc", "bcd", "cde"}
  • Ký tự chung: {'c'} (xuất hiện trong cả 3 chuỗi)
  • Kết quả sau xóa 'c': {"ab", "bd", "de"}

Lưu ý: Code gốc rất phức tạp, có lỗi syntax (HashMapString, Integer>), logic sai (dùng HashMap đếm tần suất chuỗi thay vì ký tự). Đã viết lại rõ ràng: 1) Lấy chuỗi duy nhất, 2) Tìm intersection ký tự, 3) Xóa ký tự chung. Không cần @RequiresApi, Stream.