Java Scanner类帮助

时间:2010-10-16 05:17:35

标签: java java.util.scanner

我想了解如何使用扫描仪从输入文件中打印某个字符串。对于要打印的字符串,该行必须以* star开头,并且字符串必须用引号括起来,并且是下一个标记,并且与* star忽略空格当然在同一行。

示例输入文本文件:“test.txt”

  

这是一个测试

     

* star“variableX”

     

更多测试

     

* star“variableY

     

更多

     

测试

     

*明星下一个“variableZ”

根据此示例输入文本,输出应该只是。

  

“variableX”

以下是我的代码的一部分:

    Scanner scanner = new Scanner (new File ("test.txt"));

    while (scanner.hasNextLine()){

        if(scanner.hasNext("*star")) {
            scanner.next();

            if(scanner.hasNext()){
                String test = scanner.next();
                System.out.println(test);
            }

但它缺少一些关键的东西。非常感谢帮助!

3 个答案:

答案 0 :(得分:2)

package so3947761;

import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Main {
  private static final Pattern RELEVANT_LINE_PATTERN =
      Pattern.compile("^\\*star\\s+\"(.*)\"$");

  public static void main(String[] args) throws FileNotFoundException {
    Scanner scanner = new Scanner(new File("test.txt"));

    while (scanner.hasNextLine()) {
      String line = scanner.nextLine();

      Matcher m = RELEVANT_LINE_PATTERN.matcher(line);
      if (m.matches()) {
        String data = m.group(1);

        System.out.println(data);
      }
    }
  }
}

一些评论:

  • 我只使用扫描仪将输入分成几行。
  • 实际工作由正则表达式模式完成,其中包含您声明的所有要求。
  • 如果要进一步解析引号中的文本(例如用换行符替换\n),则正则表达式无法完成此操作,因此您必须明确定义要替换的序列。
  • 如果您愿意,可以在\\s*(行的开头)和^(行尾)的右侧添加$允许在这些地方使用空格。

答案 1 :(得分:1)

    while (scanner.hasNextLine()){

        String line = scanner.nextLine();

        if(line.startsWith("*star")){

        String[] split= line.split("\\s+"); //Split the string where there is whitespace

        //No whitespace after *star 
        if ((split.length<2)){
        System.exit(0); 
        }

        String file= split[1];
        String star=split[0];

        String file1=file.trim(); //Removes whitespace 

        if(file1.startsWith("\"")&&(file1.endsWith("\""))){

        System.out.println(file1);
        }

   }

答案 2 :(得分:-1)

这就是诀窍

public static void main(String[] args) throws FileNotFoundException
    {
        Scanner scanner = new Scanner (new File ("c:\\test.txt"));

        while (scanner.hasNextLine()){
            if(scanner.hasNext(Pattern.compile("\\*star"))) {
                scanner.next();
                System.out.println(scanner.nextLine());
                return;
            }
            else
                scanner.nextLine();
        }
    }

修改 答案中缺少引用部分,不记得把它放在我得到输出的情况下,即使没有它,但这里是一个更强大的解决方案:

Scanner scanner = new Scanner (new File ("c:\\new.txt"));

        while (scanner.hasNextLine()){
            if(scanner.hasNext(Pattern.compile("\\*star"))) {
                scanner.next();
                String s = scanner.nextLine();
                Matcher m = Pattern.compile("\".+\"").matcher(s);
                if(m.find())
                {
                    System.out.println(m.group());
                    return;
                }
            }
            else
                scanner.nextLine();
        }