【问题标题】:Counting number of special characters in a given String计算给定字符串中特殊字符的数量
【发布时间】:2015-01-10 10:16:34
【问题描述】:

我正在尝试制作一个程序来计算给定字符串中的特殊字符。但它不起作用。这是我的代码。

public static final String []specialChars = {"!", "@", "#", "$", "%", "^", "&", "*", "(", ")",
                                             "[", "]", "|", ";", "'", ",", ".", "/", "{", "}", 
                                             "\\", ":", "\"", "<", ">", "?" };

我使用数组是因为我试图在字符串中跟踪匹配的特殊字符。所以我决定做循环。

int specialCharCount = 0;
        for ( int x = 0; x < specialChars.length ; ++x) {
               specialCharCount = password.length() - password.replaceAll("\\specialChars[x]", "").length();
           }
           System.out.print(" and " + specialCharCount + " special characters.\n\n");

它正在运行,但它给了我这个输出:

and 0 special characters.

【问题讨论】:

    标签: java arrays string character


    【解决方案1】:

    您遇到的问题是您只考虑最后一个字符的数量。我怀疑你想要所有特殊字符计数的总和。

    for( int x = 0; x < specialChars.length ; ++x) {
        specialCharCount += password.length() 
                        - password.replaceAll("\\" + specialChars[x], "").length();
    }
    

    顺便说一句,在调试器中单步执行代码会很快发现。

    怎么样。

    String SPECIAL_CHARS_REGEX = "[!@#$%^&*()\\[\\]|;',./{}\\\\:\"<>?]";
    
    int specials = password.split(SPECIAL_CHARS_REGEX, -1).length - 1;
    

    【讨论】:

    • 当我添加 + 时,它仍然为零。当我使用SPECIAL_CHARS_REGEX 时,输出变为-1,我的示例输入为@#%
    • @Patrick 它没有计算任何尾随特殊字符,现已修复 ideone.com/GBWtzf
    • 我知道我在参数中丢失了-1。顺便说一句,-1 有什么用?
    【解决方案2】:

    我看到的代码中存在一些问题

    1. += - 我认为您希望每次都增加计数。在代码中使用 = 将分配字符串中最后一个特殊字符的计数(“?”)
    2. password.replaceAll() 不会修改原始字符串。 java中的字符串是不可变的。您将不得不再次将返回引用分配给自身。

      password = password.replaceAll("REPLACING STRING", "REPLACED BY STRING");

    3. 以下代码中的第一个参数不应在引号内为password.replaceAll("\\specialChars[x]", "")。在您的情况下,它被视为字符串文字,而不是 specialChars[x] 的实际值。

      "specialChars[x]"specialChars[x] 之间有区别

    【讨论】:

    • 谢谢先生。我在这里基于我的replaceAll 来计算特殊字符的数量。 link
    • 没关系。但下次进入循环时,您的密码仍将具有初始值而不是替换值。因此,整个循环的 password.length() 将始终相同。你可能想检查你的逻辑。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-11-08
    • 2018-07-23
    • 1970-01-01
    • 1970-01-01
    • 2020-08-13
    • 1970-01-01
    • 2014-01-30
    相关资源
    最近更新 更多