如何在JAVA中输入空字符串

问题描述 投票:0回答:2

我的程序应检查s是否为空字符串,如果发现为空,则应打印“空字符串”并提示输入新的内容。但是,我的所有第一次运行都不需要s,它会打印“空字符串”,然后运行完美!

Scanner input = new Scanner(System.in);
int t = input.nextInt();
while (t > 0) {
    String s;
    s = input.nextLine();
    if (s.isEmpty()) {
        System.out.println("Empty string");
        s = input.nextLine();
    } 
}

如何避免第一个“空字符串”?

PS,我尝试过-

s = input.next();

这解决了问题,但现在不允许我在程序中输入空字符串!

PPS-签出:

import java.util.*;
import java.lang.*;
import java.io.*;

class ComparePlayers {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        int t = input.nextInt();
        while (t > 0) {
            String s;
            s = input.nextLine();
            if (s.isEmpty()) {
                System.out.println("Empty String");
                s = input.nextLine();
            }
            else {
                System.out.println("Not Empty");
            }
            t--;
        }
    }
}

您可以看到3个i / ps,而其中一个o / ps被空字符串占用。

java string next is-empty
2个回答
0
投票

这是因为Scanner.nextInt()方法不读取在终端输入中写入数字后按'Enter'生成的\ n新行)字符。一个简单的解决方法是使用input.nextLine()读取\ n字符,并在使用Scanner.nextX()方法后立即忽略它。

所以您的代码更改为此:

Scanner input = new Scanner(System.in);
int t = input.nextInt(); // read and ignore extra \n character
input.nextLine();

while (t > 0) {
    String s;
    s = input.nextLine();
    if (s.isEmpty()) {
        System.out.println("Empty string");
        s = input.nextLine();
    } 
}

0
投票

这样做是因为input.nextInt();不会捕获换行符。您可以像其他提案一样通过添加input.nextLine();

Scanner input = new Scanner(System.in);
int t = Integer.parseInt(input.nextLine());
while (t > 0) {
    String s = input.nextLine();
    if (s.isEmpty()) {
        System.out.println("Empty string");
        s = input.nextLine();
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.