Java 从一系列用户输入中拆分字符串
我正在处理一个问题,该问题涉及读取用户字符串输入,直到用户输入为空,然后分割并打印空白。到目前为止,我可以设法分割空白,但当多用户输入时,它只分割并打印第一行。请看下面我的代码图片,以获得更好的想法。任何帮助都将不胜感激 导入java.util.Scanner 公共类线路{Java 从一系列用户输入中拆分字符串,java,split,Java,Split,我正在处理一个问题,该问题涉及读取用户字符串输入,直到用户输入为空,然后分割并打印空白。到目前为止,我可以设法分割空白,但当多用户输入时,它只分割并打印第一行。请看下面我的代码图片,以获得更好的想法。任何帮助都将不胜感激 导入java.util.Scanner 公共类线路{ public static void main(String[] args) { Scanner scanner = new Scanner(System.in); while (true) {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
while (true) {
String input = scanner.nextLine();
if (input.equals("")) {
break;
}
if (input.contains(" ")) {
String[] tokens = input.split(" ");
// Then print them
for (String token : tokens) {
System.out.println(token);
}
}
}
}
}使用while scanner.hasNext并删除if/else条件。然后您的代码就可以工作了。问题在于您组织代码的方式。调用readLine,然后在if/else中调用readLine,然后打印出前面的标记,然后再次调用readLine,而不处理前面的标记
public class LineByLine {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
while (true) {
String input = scanner.nextLine();
// check for empty line immediately.
if (input.equals("")) {
break;
}
// otherwise split it (and use the regular expression for one
// more white spaces).
String[] tokens = input.split("\\s+");
// Add space for additional tokens.
allTokens = Arrays.copyOf(allTokens, allTokens.length + tokens.length);
// copy new tokens to array.
int i = allTokens.length - tokens.length;
for (String v : tokens) {
allTokens[i++] = v;
}
}
for (String token : allTokens) {
System.out.println(token);
}
}
}
我将您的数组从空白改为令牌,因为您并没有真正节省空白
使用ArrayList而不是数组
在开始时初始化它
List<String> allTokens = new ArrayList<>();
完成后,打印它们
for (String str : allTokens) {
System.out.println(str);
}
请不要将您的代码作为图像发布在本网站上,而是作为代码格式的文本发布,因为我们都无法复制、粘贴和运行图像。有关这方面的更多信息,请参阅。另外,请查看以了解更多的现场最佳实践。我建议阅读BufferedReader上的文档,并使用它而不是Scanner;数组将包含行中的单词列表。感谢您让我知道,我很抱歉,我以后不会发布图像,除非您可以发出EOF信号,例如*nix机器扫描仪上的ctrl-D。HASEXT可能无法按照控制台输入的要求工作,因为扫描仪不知道用户何时不想键入其他行。因此,它只是阻塞并等待用户输入。这不同于在文件中扫描,当所有数据都已读取时,底层文件系统会发出EOF信号。感谢您的帮助!在您的帮助下,我已将代码重新调整为以下内容。但我仍然有一个输出问题。我需要for循环执行,完成后才打印字符串。我尝试在for循环之外声明一个新的字符串变量,但在循环完成后打印行时遇到了困难。请查看我的更新代码的原始帖子,谢谢!我修改了我的答案,向您展示了如何增加数组的大小以附加更多的项。但是,使用ArrayList会使这更容易,因为您只需在开始时分配它一次,然后添加值即可。附加代码对用户是透明的。
for (String str : allTokens) {
System.out.println(str);
}