【问题标题】:java scanner ignores ^ Caretjava扫描仪忽略^插入符号
【发布时间】:2012-04-08 20:25:52
【问题描述】:

我正在尝试通过使用方法 useDelimiter("&|=|~|^"); 将 java 扫描器与以下一组分隔符 & = ~ ^(与号、等于、波浪号、插入符号)一起使用。

除了被忽略的^ 之外,所有分隔符都可以正常工作:为什么会这样?

我在 Scanner 文档中看不到原因。

【问题讨论】:

  • “波浪线”被称为“波浪线”(~)en.wikipedia.org/wiki/Tilde
  • 我是这么认为的......只是不认为我可以正确拼写波浪号

标签: java java.util.scanner delimiter


【解决方案1】:

你需要转义^,像这样:useDelimiter("&|=|~|\\^")。这是因为^ 是正则表达式中的元字符,而useDelimiter()String 参数最终被编译为正则表达式Pattern

同样,你可以这样写分隔符,在这种情况下,不需要转义^useDelimiter("[&=~^]")

【讨论】:

  • 我已经尝试过这种方法,但它没有用......但我认为这是因为 ^ 紧随其后的是 =。我相信如果两个分隔符相互跟随,那么使用单个分隔符列表不起作用......或者可能两个相邻的分隔符最终在令牌中获得 null
  • 在字符类中(正则表达式中被[]包围的东西),如果在开头找到^,则表示否定。例如,这个[^abc] 表示:匹配任何 a、b 或c。如果插入符号出现在字符类中的任何其他位置,则将其解释为普通字符
【解决方案2】:

^是正则表达式中的保留符号,需要转义:\\^

【讨论】:

    【解决方案3】:

    你可以使用character class

    "[&=~^]"
    

    由于^ 在字符类中并不特殊(开头除外),因此不需要转义。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-23
      • 2015-11-27
      • 2023-03-20
      相关资源
      最近更新 更多