Заменить часть строки, используя 0,1 вместо "" - PullRequest
0 голосов
/ 05 января 2019
    mSwitch.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            if (mSwitch.getText().equals("Everybody")) {
                PRIVACY = PRIVACY.replace(PRIVACY.substring(0, 1), "E");
                Log.d("TEXT", PRIVACY);
            } else if (mSwitch.getText().equals("Nobody")) {
                PRIVACY = PRIVACY.replace(PRIVACY.substring(0, 1), "N");
                Log.d("TEXT", PRIVACY);
            }
        }
    });

Строка конфиденциальности = "E / E / N / N / E ........ / N

У меня есть несколько кнопок для изменения каждого символа

Это просто случайные символы, разделенные "/"

Итак, по нажатию кнопки Toggle, я хочу заменить один из символов на E или N, но в приведенном выше коде я заменяю все, как результат, либо E / E / E / E / E ... или N / N / N / N / N ...

Где я ошибся?

Ответы [ 2 ]

0 голосов
/ 05 января 2019

Эта строка:

PRIVACY = PRIVACY.replace(PRIVACY.substring(0, 1), "E")

заменяет внутри PRIVACY каждое вхождение любого 1-го символа на "E",
потому что первый параметр метода replace() - это строка для поиска.
Сделайте это так:

mSwitch.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        if (mSwitch.getText().equals("Everybody")) {
            PRIVACY = "E" + PRIVACY.substring(1);
            Log.d("TEXT", PRIVACY);
        } else if (mSwitch.getText().equals("Nobody")) {
            PRIVACY = "N" + PRIVACY.substring(1);
            Log.d("TEXT", PRIVACY);
        }
    }
});

PRIVACY.substring(1) является частью КОНФИДЕНЦИАЛЬНОСТИ, начиная со 2-го символа до его окончания.
Редактировать
Если вы хотите заменить 5-й символ на «A»:

PRIVACY = PRIVACY.substring(0, 5) + "A" + PRIVACY.substring(6);

Подробнее substring ()

0 голосов
/ 05 января 2019

Есть несколько вариантов замены символа в одной позиции. Одним из них является использование stringbuilder.

Пример:

 mSwitch.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        if (mSwitch.getText().equals("Everybody")) {
            StringBuilder stringBuilder = new StringBuilder(PRIVACY[0]);
            stringbuilder.setCharAt(0, 'N'); //you can also use "N".charAt(0) instead of 'N'
            Log.d("TEXT", stringbuilder.toString());
        } else if (mSwitch.getText().equals("Nobody")) {
            StringBuilder stringBuilder = new StringBuilder(PRIVACY[0]);
            stringbuilder.setCharAt(0, 'E'); //you can also use "E".charAt(0) instead of 'E'
            Log.d("TEXT", stringbuilder.toString());
        }
    }
});
...