Java 计算给定字符串中特殊字符的数量

Java 计算给定字符串中特殊字符的数量,java,arrays,string,character,Java,Arrays,String,Character,我正在尝试制作一个程序来计算给定字符串中的特殊字符。但它不起作用。这是我的密码 public static final String []specialChars = {"!", "@", "#", "$", "%", "^", "&", "*", "(", ")", "[", "]", "|", ";", "'", ",", ".", "/", "{", "}",

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

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

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

for( int x = 0; x < specialChars.length ; ++x) {
    specialCharCount += password.length() 
                    - password.replaceAll("\\" + specialChars[x], "").length();
}
for(int x=0;x
顺便说一句,在调试器中逐步检查代码会很快发现这一点

怎么样

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

int specials = password.split(SPECIAL_CHARS_REGEX, -1).length - 1;
String SPECIAL_CHARS_REGEX=“[!@$%^&*()\[\\]\\\”,./{\\\\:\“?”;
int specials=password.split(SPECIAL_CHARS_REGEX,-1);

我看到的代码中很少有问题

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

    password=password.replaceAll(“替换字符串”、“替换为字符串”)

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

    “特殊准星[x]”
    特殊准星[x]


  • 当我添加
    +
    时,它仍然是零。当我使用
    特殊字符正则表达式
    时,输出变成
    -1
    我的示例输入是
    %
    @Patrick,它没有计算任何尾随的特殊字符,现在我知道了,我在一个参数中丢失了
    -1
    。顺便说一句,
    -1
    在那里用了什么?谢谢你,先生根据我的
    replaceAll
    计算特殊字符的数量。这很好。但下次它进入循环时,您的密码仍将具有初始值,而不是替换的值。因此整个循环的password.length()将始终相同。您可能需要检查逻辑。
    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;