如何计算唯一字符(仅限字母和数字)

时间:2014-03-25 15:04:00

标签: java character unique

//我有一个程序,我应该计算唯一的字符,只有字母和数字,不计算重复的数字或字母。但是,我有一个问题,找不到程序不计算空格和符号的方法,如“!” “@”“#”“$”。所以,如果我输入你好!我只希望程序说“4”,但它说“5”因为它计算了感叹号。到目前为止,这是我的代码:

public static int countUniqueCharacters(String text1) {
        int count = 0;
        for (int i = 0; i < text1.length(); i++) {
            if (text1.substring(0, i).contains(text1.charAt(i) + ""))
                System.out.println();
            else
                count++;
        }
        return count;

    }

3 个答案:

答案 0 :(得分:1)

在你的else块中添加一个条件,只有当给定的字符是字母或数字时,才会增加计数。

if (Character.isLetter(text1.charAt(i)) || Character.isDigit(text1.charAt(i))) {
    count++;
}

在你的例子中:

public static int countUniqueCharacters(String text1) {
    int count = 0;
    for (int i = 0; i < text1.length(); i++) {
        if (text1.substring(0, i).contains(text1.charAt(i) + "")) {
            System.out.println();
        } else if (Character.isLetter(text1.charAt(i)) || Character.isDigit(text1.charAt(i))) {
            count++;
        }
    }
    return count;
}

答案 1 :(得分:0)

这里是用C#编写的示例代码,试着理解它。它与ascii进行比较并添加到列表中

string input = Console.ReadLine();//input
        List<char> CountedCharacters = new List<char>();
        for (int i = 0; i < input.Length; i++)
        {           //checking for numerics             //checking for alphabets uppercase      //checking for alphabets lowercase
            if ((input[i] >= 45 && input[i] <= 57) || (input[i] >= 65 && input[i] <= 90) || (input[i] >= 97 && input[i] <= 122))
            {
                bool AlreadyExists = false;
                for (int j = 0; j < CountedCharacters.Count; j++)
                {
                    ////checking if already exists
                    if (CountedCharacters[j]==input[i])
                    {
                        AlreadyExists = true;
                        break;
                    }
                }
                ////adding in list if doesnt exists
                if (!AlreadyExists)
                {
                    CountedCharacters.Add(input[i]);
                }

            }
        }


        for (int i = 0; i < CountedCharacters.Count; i++)
        {
            Console.WriteLine(CountedCharacters[i]);
        }

答案 2 :(得分:0)

使用正则表达式尝试这个。您可以在表达式中添加和删除所需的字符,以计算您的需要。

public static int countUniqueCharacters(String text1) {
    String newText = text1.replaceAll("[^A-Za-z0-9()\\[\\]]", "");
    Set<Character> tempSet = new HashSet<>();
    for (char item : newText.toCharArray()) {
        tempSet.add(item);
    }
    return tempSet.size();
}