Как посчитать количество букв, которые существуют без повторения - PullRequest
1 голос
/ 07 апреля 2020

Мне нужен способ подсчета букв в строке, например:

Моя строка: "Здравствуйте, мои друзья"

Символы в строке: {H, e, l, o,, m, y, f, r, i, n, d, s}

Эти буквы существуют без их повторения (с пробелом). Поэтому я хочу получить результат: 13

Цель всего этого заключается в том, что я хочу преобразовать строку в таблицу символов без повторения букв

EX: MY String = "Hello"

Таблица, которую я хочу получить {H, e, l, o}

Моя попытка

 public static int numberRep(String txt) {
    int count = 0;
        boolean v = false;
        for (int i = 0; i != txt.length(); i++) {
            char c = txt.charAt(i);
            for (int j = i + 1; j != txt.length(); j++) {
                if (txt.charAt(j) == c) {
                    count++;
                }
            }
            if(count == txt.length()-1){
                v = true;
            }
        }
        if(v){
            return 1 ;
        }
        else{
        return count;
        }

    }

Ответы [ 4 ]

2 голосов
/ 07 апреля 2020

Разделите строку на символы и сохраните их в Set. A Set сохраняет только уникальные элементы. Элементы Set будут необходимыми символами, а размер Set даст вам количество этих символов.

Сделайте это следующим образом:

import java.util.Arrays;
import java.util.LinkedHashSet;
import java.util.Set;
import java.util.stream.Collectors;

public class Testing {
    public static void main(String[] args) {
        String myString = "Hello my friends ";
        Set<String> set = Arrays.stream(myString.split("")).collect(Collectors.toCollection(LinkedHashSet::new));
        System.out.println("Unique characters including space: " + set);
        System.out.println("No. of unique characters including space: " + set.size());
    }
}

Вывод:

Unique characters including space: [H, e, l, o,  , m, y, f, r, i, n, d, s]
No. of unique characters including space: 13
0 голосов
/ 07 апреля 2020
 public static void main(String[] args) {
        final String test = "Hello my friends";

        final int size = IntStream.range(0, test.length())
                .mapToObj(test::charAt)
                .collect(Collectors.toSet()).size();

        System.out.println(size);
    }

То, что я здесь сделал, итерируется по всем символам во входной строке, сопоставляет их с char объектом, а затем собирает их в Set - вместо сохранения необработанного Set Я использовал .size(), чтобы получить результат, который вы ожидали.

0 голосов
/ 07 апреля 2020

Что вы можете сделать:

  1. Создать пустой список a
  2. для символа в списке:
  3. Если символ не является вашим списком a: добавить его в свой список

Таким образом, вы не получите повторяющихся символов.

Вы также можете использовать набор, как рекомендовано в ответе Арвинда, но я думаю, что это Вам лучше написать функцию как задачу. Сет - это более чистый способ сделать это, когда вы постигли концепции Java.

0 голосов
/ 07 апреля 2020

Ну, это может быть одним из подходов для этого:

String str = "Hello my friends "
String noRepeatStr = "";

for(int i = 0; i < str.length; i++) {
    if(noRepeatStr.indexOf(str[i]) == -1) // check if a char already exist, if not exist then return -1
        noRepeatStr = noRepeatStr+str[i];      // add new char
}

System.out.println("Letters: " + noRepeatStr.toCharArray())
System.out.println("No of letters: " + noRepeatStr.length)

...