在java中执行字符对字符匹配时出错

在java中执行字符对字符匹配时出错,java,comparison,character,Java,Comparison,Character,我正在使用下面的代码进行字符对字符的比较,并检查是否存在一些特殊字符,但它不起作用。你知道为什么与特殊角色的比较不起作用吗 Scanner sc= new Scanner(System.in); System.out.print("Enter the password to validate: "); String pass = sc.nextLine(); char ch=0; for(int i=0;i<pass.length();i++) { ch = pass.c

我正在使用下面的代码进行字符对字符的比较,并检查是否存在一些特殊字符,但它不起作用。你知道为什么与特殊角色的比较不起作用吗

Scanner sc= new Scanner(System.in);
System.out.print("Enter the password to validate: ");
String pass = sc.nextLine();    

char ch=0;
for(int i=0;i<pass.length();i++)
{
    ch = pass.charAt(i);

    if(ch !='$' || ch !='@' || ch !='#' || ch !='%' || ch !='&')  
      splchar++;
}

if(splchar == pass.length())
    System.out.println("Invalid Password");
else
    System.out.println("Valid Password");

你的情况总是正确的

ch !='$' || ch !='@' || ch !='#' || ch !='%' || ch !='&'
是一样的吗

! (ch == '$' && ch =='@' && ch =='#' && ch =='%' && ch =='&')
因为一个值不能同时是$和@,所以它永远是!先假后真

你想要

ch =='$' || ch =='@' || ch =='#' || ch =='%' || ch =='&'
来检查它是否是这些字符之一

替代阵列 您可以使用

char[] needed = {
    '@', '$', '#', '%', '&'
};
然后,您只需要在该数组中搜索匹配项,因为数组提供了这些方法,所以您只需要使用数组检查它。binarySearchneeded,ch,它将返回字符匹配的位置,或者-1为nothing,这样您就可以使用

if(Arrays.binarySearch(needed, ch) < 0)  
          splchar++;
当然,仅仅搜索字符就有点复杂了,Joop Eggen再次提出了一个适用于char的简化版本:@$%&.indexOfch!=-一,

替代方案-正则表达式
您可以使用正则表达式直接将其与字符串匹配。但我会让您对该逻辑进行一些研究,这是断章取义的。

您能否提供示例输入/输出以更好地理解问题。您调试了它吗?你应该知道这是有可能的Regex@Karan-例如,将输入作为Preran1$,它是有效的密码,但显示无效的密码。@Kaustubh Khare-它不起作用。@AxelH我认为我的代码编译时没有错误,但是,即使我给出了密码中存在$并打印出无效密码,为什么它也会跳过if循环,这超出了我的推理范围。答案很好,但binarySearch只在排序数组上工作,这是不需要的。我提议§%&.indexOfch!=-1是的,我正在增加splchar变量。如果你看到If条件,我会比较splchar和pass length。如果splchar变量等于密码长度,则肯定不存在特殊字符。因此它应该显示无效密码,对吗?@JoopEggen true!我忘了添加array.sort!我将以前使用的逻辑用于从文件恢复的字符串,我应该考虑直接使用字符串。。。很好的建议。@Sharath你的逻辑是正确的,你的情况不是。你不能让一个字符等于两个不同的字符,这就是你所拥有的。ch!='$'|ch!='@'=ch与$或@不同。所以,即使这是这两种情况中的一种,这仍然是正确的,你的条件也不可能给出错误的结果。
`Arrays.sort(needed)`