字符串标记器和扫描程序java

字符串标记器和扫描程序java,java,java.util.scanner,stringtokenizer,Java,Java.util.scanner,Stringtokenizer,我有一个大的文本文件,我想用分隔符将它分隔成不同的字符串(每个字符串有多行) 然后,我想放弃不包含以下内容的所有其他字符串: =========== ALL OBJECTS IN CLASS: FENESTRATIONSURFACE:DETAILED =========== 到目前为止,我已经得到了这个,它没有输出任何东西(它符合要求,但没有输出到控制台)。我是编程新手,在研究了一段时间后,我没有取得多大进展,所以任何建议或指针都将不胜感激,谢谢 public class Main {

我有一个大的文本文件,我想用分隔符将它分隔成不同的字符串(每个字符串有多行)

然后,我想放弃不包含以下内容的所有其他字符串:

===========  ALL OBJECTS IN CLASS: FENESTRATIONSURFACE:DETAILED ===========
到目前为止,我已经得到了这个,它没有输出任何东西(它符合要求,但没有输出到控制台)。我是编程新手,在研究了一段时间后,我没有取得多大进展,所以任何建议或指针都将不胜感激,谢谢

public class Main {
    public static void main(String[] args) throws FileNotFoundException {
        File file = new File("C:/Users/Anton/Pictures/1 x geotransform0.5m shading.txt");
        Scanner scan = new Scanner(file);
        while(scan.hasNextLine()){
            StringTokenizer st = new StringTokenizer(scan.nextLine(),"!-");
            if(st.equals("   ===========  ALL OBJECTS IN CLASS: FENESTRATIONSURFACE:DETAILED ===========")) {
                System.out.print(st);
            }
        }
        scan.close();
    }
}

您应该考虑阅读java文档页到<代码> StruttoKeNex:

代码中有两个不同的问题:
  • 由于所需的字符串是文件中的多行,因此首先必须将它们相加(添加到
    字符串
    ),然后通过
    StringTokenizer
    使用它再次分离
  • 您必须将
    StringTokenizer.nextToken()
    与您的支票
    String
    进行比较,而不是将整个
    StringTokenizer
    进行比较
    StringTokenizer.nextToken()
    然后提供通过
    分隔的下一个字符串-
  • 以下代码应该可以工作:
    删除if条件并添加以下while条件

     while (st.hasMoreElements()) {
                            System.out.println(st.nextElement());
                        }
    
    因为stringtokenizer基于标记拆分文本。所以你的“如果”永远不会变成真的。

    试试这个

    while(scan.hasNextLine()){
                    StringTokenizer st = new StringTokenizer(scan.nextLine(),"!-");
                    while(st.hasMoreTokens()){
                        String stt = st.nextElement().toString();
                        if(stt.equals("===========  ALL OBJECTS IN CLASS: FENESTRATIONSURFACE:DETAILED ===========")) {
                            System.out.print(stt);
                        }
                    }
                }
    

    您正在将字符串与stringtokenizer对象而非值进行比较…

    Robert首先感谢您的回答这部分起作用主要是您忘记在第一个while循环中使用temp=temp+scan.nextLine()来更新temp的值。修复此问题后,它只输出“===================类中的所有对象:窗表面:详细====================”我要做的是输出包含此项的令牌。有什么建议吗?
    while(scan.hasNextLine()){
                    StringTokenizer st = new StringTokenizer(scan.nextLine(),"!-");
                    while(st.hasMoreTokens()){
                        String stt = st.nextElement().toString();
                        if(stt.equals("===========  ALL OBJECTS IN CLASS: FENESTRATIONSURFACE:DETAILED ===========")) {
                            System.out.print(stt);
                        }
                    }
                }