【问题标题】:Scanner Class to create tokens of an input file用于创建输入文件令牌的扫描程序类
【发布时间】:2013-01-14 17:27:01
【问题描述】:

我在java中编写了以下代码来打开另一个.java文件并创建令牌(使用扫描器类)

import java.io.FileReader;
import java.util.Scanner;

public class scanner1 {
    public static void main(String[] arg) throws Exception
    {
        FileReader fin = new FileReader("mysourcefile.java");
        Scanner scan=new Scanner(fin);
        scan.useDelimiter(" ");   // the delimiter pattern required
        while(scan.hasNext()) {
            System.out.println(scan.next());
        }
    }
}

我的任务是创建完整的Java 文件的标记,并且分隔符也应该被视为标记。

那么在scan.useDelimiter("") 中使用的分隔符模式应该是什么?

更新:

上面的任务是使用 stringtokenizer 完成的。但我不知道为.java 文件创建标记的定界符的确切模式。我可以回答在给定情况下使用什么分隔符模式吗?

import java.util.*;
public class sstring2
{
    public static void main(String[] args)
    {
        String s = "a=(b+c); String st='hello! my dear';";
        StringTokenizer st = new StringTokenizer(s, "[ =+';().*{}[],!@#$%^&/]", true);
        while(st.hasMoreTokens()){
            System.out.println(st.nextToken());
        }
    }
}

这段代码给出了正确的结果。

【问题讨论】:

  • 注意:您可以链接:new Scanner(fin).useDelimiter("whatever").useDelimiter() 返回this
  • 嗯,这是您应该阅读的内容:docs.oracle.com/javase/specs。假设您正在尝试构建一个严肃的 Java 源代码解析器。
  • 扫描仪旨在忽略分隔符。 StringTokenizer 可能是更好的选择。
  • @PeterLawrey 是的,我也使用了 stringtokenizer。它正确地给出了分隔符。但分隔符字符串问题与我面临的相同。我也可以编辑并发布该 java 代码
  • "我的任务是创建完整的 java 文件的标记,并且分隔符也应该被视为标记。" - 我仍然没有得到这个问题。正如在 java 文件中可以有任何字面意思。那么,您是否首先验证它是否是正确的 java 文件?在标记化之后你要做什么?您是否正在尝试构建自定义的自制编译器?

标签: java java.util.scanner stringtokenizer


【解决方案1】:

看看 java.lang.instrument 包。它提供了一些不错的 API 来转换已经加载的类。重新转换允许像您的情况一样更改方法主体。这是link

【讨论】:

    【解决方案2】:

    它可以是您要终止输入的任何字符。

    【讨论】:

    • 要标记完整的.java 文件使用什么字符?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-12
    • 2019-03-29
    • 2012-04-28
    • 2013-03-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多