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