如何将Scanner中的字符串拆分到ArrayList中?
首先,我尝试了这个:
Scanner sc = new Scanner(System.in);
ArrayList<String> yourList = new ArrayList<>();
while (sc.hasNext()) {
yourList.add(sc.next());
}
但是由于sc.next,当我按回车键时,它会无休止地移动。然后,我尝试了类似下面的方法(+scanner+arrayList):
String line = input.nextLine();
String [] values = line.split("//s+");
for (String a : values){
yourList.add(a);
}
但这也是错误的。一切都将在第一索引中。
作为输出,它应该从Scanner中获取String(例如-“I love my job but i am a good利耶”),并且作为输出,每个单词都应该在ArrayList中。
I
love
my
job
etc..
如果我在这里使用.size(),它应该是10。
4条答案
按热度按时间ohfgkhjo1#
Java正则表达式问题
您在
split()
方法中使用的Regex对Java不正确。Java\
反斜杠中的字符串文字被视为转义字符。因此,你必须转义反斜杠本身。您可以通过编写\\s
而不是\s
来实现这一点。示例编码:
8i9zcol22#
试试这个,希望效果很好。
nsc4cvqm3#
你的第一个方法很好。
诀窍是告诉
hasNext()
没有更多的条目。您需要键入表示文件结束(EOF)的控制字符。Mac platforms
上,您可能需要使用⌘
而不是CTRL
命令行输入期间的EOF信号允许无限数量的输入。
uelo1irk4#
在面向对象编程中,有一个概念叫做“blocking”。
当源对象可以向另一个对象提供动态数据,并且正在等待数据时,就会发生这种情况。
一个示例情况是 TCP/IP 连接-一个服务器和一个客户端。
服务器将在将数据发送到客户端之前“阻止”或等待数据。
因此,如果客户端发出一个获取数据的调用,而服务器没有数据,那么就会发生 * 阻塞 -客户端将等待。
当 * System.in * 作为源代码时,Scanner * 类也会发生类似的情况。
默认情况下,blocking 将在几个方法上发生-在本例中是 *next * 和 hasNext。
注意,当 Scanner 来源于 String 时,不会发生这种情况。
例如,这不会 * 阻塞 *。
切换到 Scanner#nextLine 是一个更好的选择,因为提交行时不会发生 * 阻塞 *。
另外,您有正确的Java代码,但 * 正则表达式模式 * 不正确。
编写正则表达式模式的概念本身就是一项任务,因为语法可能相当复杂,有时甚至过于陈旧而无法破译。
我推荐阅读Wikipedia上关于正则表达式的文章,因为它提供了语法的完整概述。
如果您熟悉基本的编码语法,就不难理解。
在代码中,您使用了错误的 solidus 字符。
应该是
如果我运行下面的代码,我会得到一个有效的输出。
输入
输出量