西西河

主题:【求助】问个弱智Java问题 -- cartman

共:💬8 🌺2 新:
分页树展主题 · 全看首页 上页
/ 1
下页 末页
  • 家园 【求助】问个弱智Java问题

    我想读一个文件时跳过加号开始的行

    if (myScanner.hasNext("^\\+.*"))

    {

    //skip

    }

    可怎么就匹配不上呢?hasNext()的正则表达式好像很诡异。

    • 家园 请进

      try

      {

      File file = new File(fileName);

      Scanner scanner = new Scanner(file);

      while (true)

      {

      if (scanner.hasNext("(?=^+)..*"))

      {

      System.out.println(scanner.next());

      }

      else

      {

      System.out.println("noMore");

      break;

      }

      }

      scanner.close();

      }

      catch (FileNotFoundException e)

      {

      e.printStackTrace();

      }

      • 请进
        家园 谢谢

        但还是只有第一行管用。不过我发现可以使用"\\G"代替"^"或者使用multiline mode

        • 谢谢
          家园 再请进

          不好意思第一次用scanner,没验证清除就发上来误事

          经过尝试,发现hasNext()或者hasNextLine(0或者hasNext(pattern)等不能在next()前连用。否则会导致Scanner无限读取。。。while循环无法停止。。。

          新的code在下面:

          try

          {

          File file = new File(fileName);

          Scanner scanner = new Scanner(file);

          String tmp;

          scanner.useDelimiter("[\\p{javaWhitespace}&&[^ ]]+");

          while (scanner.hasNextLine())

          {

          tmp = scanner.next();

          if (tmp.matches("(?=^\\+)..*"))

          {

          System.out.println(tmp);

          }

          }

          scanner.close();

          }

          catch (FileNotFoundException e)

          {

          e.printStackTrace();

          }

          • 家园 补充及修正。。汗。。。

            经过尝试,发现hasNext()或者hasNextLine(0或者hasNext(pattern)等不能在next()前连用。否则会导致Scanner无限读取。。。while循环无法停止。。。

            突然想起来,next()是取出,凡是带has的都不取出。我的循环里面如果has...为否,就直接进行下一次认证了。所以才导致无限循环的。

            如果无论是否与reg exp匹配都取出字串,就正常了。

            另一个版本:

            try

            {

            File file = new File(fileName);

            Scanner scanner = new Scanner(file);

            // String tmp;

            scanner.useDelimiter("[\\p{javaWhitespace}&&[^ ]]+");

            while (scanner.hasNext())

            {

            // tmp = scanner.next();

            // if (tmp.matches("(?=^\\+)..*"))

            // {

            // System.out.println(tmp);

            // }

            if (scanner.hasNext("(?>-)..*"))

            {

            System.out.println(scanner.next());

            }

            else

            {

            System.out.println("Reg Exp Not Foundin seq: " + scanner.next());

            }

            }

            scanner.close();

            }

            catch (FileNotFoundException e)

            {

            e.printStackTrace();

            }

    • 家园 pattern不对
      • 家园 不行

        没用。不是逻辑的问题。无论"^[\\+].*$","^[^\\+].*$"都不行。有人说是scanner实际上停在了上一行的末尾

分页树展主题 · 全看首页 上页
/ 1
下页 末页


有趣有益,互惠互利;开阔视野,博采众长。
虚拟的网络,真实的人。天南地北客,相逢皆朋友

Copyright © cchere 西西河