任何人都可以帮助我理解这行代码是如何工作的:
String s = new Scanner(new URL("http://example.com").openStream(), "UTF-8").useDelimiter("\\A").next();
该代码用于直接从网页上读取。 扫描程序对象究竟是如何转换为字符串的,以及我们使用分隔符的原因。
感谢。
答案 0 :(得分:8)
以下是滥用缩进的情况
new Scanner( // A new scanner is created
new URL("http://example.com") // the scanner takes a Stream
// which is obtained from a URL
.openStream(), // - openStream returns the stream
"UTF-8") // Now the scanner can parse the
// stream character by character
// with UTF-8 encoding
.useDelimiter("\\A") // Now the scanner set as
// delimiter the [Regexp for \A][1]
// \A stands for :start of a string!
.next(); // Here it returns the first(next)
// token that is before another
// start of string.
// Which, I'm not sure
// what it will be
一个简单的文本扫描程序,可以使用正则表达式解析基本类型和字符串。 扫描程序使用分隔符模式将其输入分解为标记,分隔符模式默认匹配空格。然后可以使用各种下一种方法将得到的标记转换为不同类型的值。
所以你刚刚将\A
替换为分隔符(而不是空格)。
但是\A
has a specific meaning when evaluating as regular expression!
如果您的信息流仅包含以下文字
\ Ahello world!\ A Goodbye!\ A
您的代码将返回整行 \Ahello world!\A Goodbye!\A
如果要删除反斜杠序列后跟大写字母A,则应使用\\\\A
。
感谢@Faux Pas指出!
答案 1 :(得分:1)
扫描仪未被转换"。在新创建的实例上,调用useDelimiter
,它返回一个相应设置了分隔符属性的Scanner实例,然后在该实例上调用next
,返回String
。
您可能希望在Java Doc中查找Scanner以进一步阅读: https://docs.oracle.com/javase/7/docs/api/java/util/Scanner.html
答案 2 :(得分:1)
添加到Kuzeko的答案,\ A匹配整个文本的开头。所以,我不认为他的'hello world'示例有效。