URL,Scanner&分隔符:这个Java代码行如何工作?

时间:2016-03-29 07:42:19

标签: java url java.util.scanner delimiter

任何人都可以帮助我理解这行代码是如何工作的:

String s = new Scanner(new URL("http://example.com").openStream(), "UTF-8").useDelimiter("\\A").next();

该代码用于直接从网页上读取。 扫描程序对象究竟是如何转换为字符串的,以及我们使用分隔符的原因。

感谢。

3 个答案:

答案 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

From the Java documentation

  

一个简单的文本扫描程序,可以使用正则表达式解析基本类型和字符串。   扫描程序使用分隔符模式将其输入分解为标记,分隔符模式默认匹配空格。然后可以使用各种下一种方法将得到的标记转换为不同类型的值。

所以你刚刚将\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'示例有效。