Java 什么是只允许字符串中有一个特殊字符的正则表达式。e、 g如果用户输入两次特殊字符(@@),则它将显示无效

Java 什么是只允许字符串中有一个特殊字符的正则表达式。e、 g如果用户输入两次特殊字符(@@),则它将显示无效,java,Java,至少有两种可能的方法。更简单的方法是使用负前瞻: import java.util.Scanner; public class fahad { public static void main(String[] args) { Scanner input = new Scanner(System.in); System.out.println("Enter your string"); String s = input.next();

至少有两种可能的方法。更简单的方法是使用负前瞻:

import java.util.Scanner;

public class fahad 
{
   public static void main(String[] args) 
   {
      Scanner input = new Scanner(System.in);
      System.out.println("Enter your string");
      String s = input.next();
      if (s.matches("\\w{2,}\\.{0,1}\\w{2,}@\\D+\\.com"))
         System.out.println("Valid: ");
      else
         System.out.println("Invalid: ");
   }
}
lookahead断言匹配零个字符,但只有当输入的任何部分未与模式的任何先前部分匹配(在本例中没有该部分)时,它才会成功匹配

然而,建设性地处理这一问题更具启发性,也更适用:

if (s.matches("(?!.*@@.*$).*")) {
    System.out.println("Valid: ");
}

匹配非@字符的初始子字符串,后跟零个或多个正好一个@的外观,后跟一个或多个非@字符,可以选择以一@结尾。它将匹配任何不包含两个相邻@字符的字符串(包括空字符串)。

您对这里的代码有什么疑问吗?
if (s.matches("[^@]*(@[^@]+)*@?")) {
    System.out.println("Valid: ");
}