I am writing a program where I need to check if a string (name) contains any whitespaces or not.

Here's part of my program :

public static void main()
    {
        Scanner sc = new Scanner(System.in) ;
        String name = "" ;
        boolean error = false ;
        do {
            if(error) System.out.println("Sorry, error. Try again") ;
            error = false ;
            
            System.out.print("Enter your name : ") ;
            name = sc.next() ;
            if(name=="") error = true ;
        } while(error) ;
        
        double amount = 0.00 ;
        do {
            if(error) System.out.println("Sorry, error. Try again") ;
            error = false ;
            
            System.out.print("Enter amount of purchase : ") ;
            amount = sc.nextDouble() ;
            if(amount<=1) error = true ;
        } while(error) ;
    }
}

为了判断name字符串输入中的错误,我需要判断字符串是否包含任何空格,因为编译器在接受amount时抛出java.lang.InputMismatchException(并且当输入的name包含空格和另一个字符串时).是否有任何预定义的函数来执行此操作?

推荐答案

您可以使用以下方法确定String是否包含空格字符.

boolean containsSpace(String string) {
    for (char character : string.toCharArray()) {
        switch (character) {
            case ' ', '\t', '\n', '\r', '\f' -> {
                return true;
            }
        }
    }
    return false;
}

此外,您还需要使用String.equals方法测试name值,而不是使用==相等运算符.

if (name.equals("")) error = true;

此外,main方法需要一个String数组或String个varargs参数才有效.

public static void main(String[] args)

以下是我将如何执行这项任务的快速演示.

public static void main(String[] args) {
    Scanner scanner = new Scanner(System.in);
    
    String name;
    while (true) {
        System.out.print("Name: ");
        name = scanner.nextLine();
        if (!containsSpace(name))
            break;
        System.out.println("Name contains white-space.  Re-enter.");
    }
    
    double amount;
    while (true) {
        System.out.print("Amount: ");
        try {
            amount = Double.parseDouble(scanner.nextLine());
            break;
        } catch (NumberFormatException exception) {
            System.out.println("Invalid amount.  Re-enter.");
        }
    }
    
    System.out.printf("Name is '%s'%n", name);
    System.out.printf("Amount is %,f%n", amount);
}

Java相关问答推荐

在数组中使用意想不到的结果

将成为一个比较者.比较…在现代Java中,编译器会对`CompareTo`方法进行优化吗?

填写文本字段后锁定PDF

ApachePOI:不带换行的新行

有没有一种方法使保持活动设置专用于java.net.http.HttpClient的一个实例

基本时态运算的ISO-8601周数据表示法

错误:在Liferay7.4中找不到符号导入com.liferay.portal.kernel.uuid.PortalUUID;";

JavaFX Maven Assembly插件一直打包到错误的JDK版本

什么是Java原子属性的正确getter和setter

Spring Data JPA慢慢地创建了太多非活动会话

如何在代码中将行呈现在矩形前面?

在Spring Boot应用程序中,server.port=0的默认端口范围是多少?

为什么在下面的Java泛型方法中没有类型限制?

Android Studio模拟器没有互联网

如何在ApacheHttpClient 5中为单个请求设置代理?

处理4.3问题:javax.xml.ind包不存在(&Q;).您可能在学习GitHub教程时遗漏了库.&Q

无法使用Open WebStart Java 8运行jnlp

接受类及其接口的Java类型(矛盾)

获取401未经授权,即使在标头中设置了浏览器名称和cookie

JavaFX中ListView中的问题