【问题标题】:Syntax for setting multiple delimiters?设置多个分隔符的语法?
【发布时间】:2015-03-26 03:57:15
【问题描述】:

我想设置一个分隔符,以便我只得到 java 源代码中的单词。

因此 ()、;=空格 等标点符号会被忽略。

我的目标是读取 java 文件的源代码并仅检测变量名称而不检测变量类型。但是标点符号有时也是变量名的一部分,所以我必须将它们屏蔽掉。

例如:public static void main(String[] args){

这一行应该只检测“main”和“args”并将它们存储起来,因为它们是变量名。但我只需要知道如何设置分隔符以忽略其他内容

所以基本上,分隔符应该包括以下内容: 空格;,()[]{}=""

【问题讨论】:

  • 您正在寻找构建解析器。这样做不属于 SO 中的问题范围,因为它太宽泛了。
  • 太宽泛了?怎么会这样?我所需要的只是通过忽略所涉及的其他 java 标点符号来获取字符的分隔符。我认为分隔符会使用大约 10 种不同的东西。 10 太多了吗?
  • 因为您要过滤掉 单词,例如访问器、方法返回类型、对象类型等 - 这意味着您无法通过简单的字符串替换来完成。例如,您想过滤我们的单词String,但您不想过滤掉变量myStringmyStrings,同时您还想过滤掉String[]。这只是提到一种具有一些可能性的类型......
  • 目标是过滤掉java代码中的标点符号+任何空格。
  • "我的目标是读取 java 文件的源代码,只检测变量名而不检测变量类型。" - 你的记忆力很差:)

标签: java parsing java.util.scanner delimiter


【解决方案1】:

您还必须处理字符串文字中的内容和一系列其他事情。实际上,您将编写一个 Java 解析器。

如果您真的想这样做,我建议您查看ANTLR。有可用的 Java 语法,例如this one

【讨论】:

    【解决方案2】:

    这可以分两步完成:

    string values= str.replaceAll("[(),;=<>]","|");  <-- replace all chars with pipe(|)
    String[] array = values.split("\\|", -1);
    

    享受吧。

    【讨论】:

    • 我不知道怎么做。他在问如何采用多个分隔符并将它们转换为单词列表。 replaceAll() 函数将所有的分隔符合二为一,然后 split 给他剩下的。
    • 大家好,我正在阅读整个 Java 源代码文件。所以我必须遍历源代码中的所有内容。因此对于从 .next() 方法获得的每个字符串,它只需要考虑单词并确定它们是否是标识符。
    • 问题被标记为java.util.scanner,所以看起来他们要求扫描仪的分隔符。
    • 我不想替换任何东西。我希望每个scanner.next() 值都以字符串为单位,没有这些: ( )[ ]{ } ; , |所以我需要知道将这些设置为 .useDelimiter() 方法中的分隔符所需的语法。
    猜你喜欢
    • 1970-01-01
    • 2010-10-13
    • 2014-08-06
    • 2017-05-21
    • 1970-01-01
    • 2015-09-14
    • 1970-01-01
    • 2021-03-04
    • 1970-01-01
    相关资源
    最近更新 更多