Java - 从 Java.Util.Scanner 解析的字符串在前面包含不需要的空格

Java - String parsed from Java.Util.Scanner includes unwanted whitespace in front

我正在尝试存储来自用户输入的两个变量,一个是输入最开头的字符,第二个是输入中跟在字符后面的字符串。对于我的一组数据集,前面总是有一个字符,后面跟着一个字符串,由空格分隔,例如:

n It's a sunny day
n Nobody

这是我的代码:

import java.util.Scanner;

public class LabProgram {
   public static void main(String[] args) {
      char charToSearch;
      String inputString;
      
      Scanner scnr = new Scanner(System.in);
      
      charToSearch = scnr.next().charAt(0);
      inputString = scnr.nextLine();
      
      System.out.println(charToSearch);
      System.out.println(inputString);
      
   }
}

对于输入'z Today is Monday',我得到了结果

z
 Today is monday

我预计:

z
Today is Monday

如您所见,实际输入前有一个空格。我希望字符串前面不包含空格。

我假设问题出在缓冲区上(坦率地说我不太了解),所以我尝试 'clear' 缓冲区并使用 scnr.next() 消耗空白,例如这个:

charToSearch = scnr.next().charAt(0);
scnr.next();
inputString = scnr.nextLine();

但这只会导致字符串被截断,如下所示:

z
 is Monday

我正在使用在线 IDE,如果与此处相关的话。

您可以调用 Scanner#skip 跳过空格。

scnr.skip("\s+");

您还可以使用 String#replaceAll 删除前导空格。

inputString = scnr.nextLine().replaceAll("^\s+", "");

您可以对字符串使用 trim() 函数。只需使用 inputString.trim() 函数清除字符串周围的空格。

我会简化它并阅读整行然后用你的逻辑解析它。喜欢,

Scanner scnr = new Scanner(System.in);
  
String line = scnr.nextLine();
char charToSearch = line.charAt(0);
String inputString = line.substring(2);
  
System.out.println(charToSearch);
System.out.println(inputString);