Uploaded image for project: 'JDK'
  1. JDK
  2. JDK-8019204

(scanner) java.util.scanner: method skip is treating newlines differently then method next

XMLWordPrintable

    • Icon: Bug Bug
    • Resolution: Unresolved
    • Icon: P3 P3
    • None
    • 7u11
    • core-libs

      FULL PRODUCT VERSION :
      java version " 1.7.0_11 "
      Java(TM) SE Runtime Environment (build 1.7.0_11-b21)
      Java HotSpot(TM) 64-Bit Server VM (build 23.6-b04, mixed mode)

      ADDITIONAL OS VERSION INFORMATION :
      Microsoft Windows [Version 6.1.7601]

      A DESCRIPTION OF THE PROBLEM :
      When using java.util.Scanner the method next is ignoring delimiter newline and method skip is not ignoring the delimiter.



      STEPS TO FOLLOW TO REPRODUCE THE PROBLEM :
      Run the attached Unit test.


      EXPECTED VERSUS ACTUAL BEHAVIOR :
      EXPECTED -
      Both tests should pass.
      ACTUAL -
      Test 1 fails. And it is hard to find out why.

      REPRODUCIBILITY :
      This bug can be reproduced always.

      ---------- BEGIN SOURCE ----------

      import java.io.StringReader;
      import java.util.Scanner;

      import junit.framework.Assert;

      import org.junit.Test;

      public class ScannerTest {

      static private final String text = " FUNCTION_BLOCK Unnamed_project
      \tVAR_INPUT
      \t\tUnnamed_variable1 : REAL;
      \tEND_VAR
      END_FUNCTION_BLOCK " ;

      @Test
      public void scannerSkipTest() {

      Scanner sc = new Scanner(new StringReader(text));
      sc.skip( " (?i)FUNCTION_BLOCK " );
      String blockName = sc.next();
      sc.skip( " (?i)VAR_INPUT " );
      String variableName = sc.next();
      sc.skip( " : " );
      String type = sc.next();
      sc.skip( " (?i)END_VAR " );
      sc.skip( " (?i)END_FUNCTION_BLOCK " );

      assert " Unnamed_project " .equals(blockName);
      assert " Unnamed_variable1 " .equals(variableName);
      assert " REAL " .equals(type);
      }

      @Test
      public void scannerWithoutSkipTest() {
      Scanner sc = new Scanner(new StringReader(text));
      String skipped = sc.next();
      assert " FUNCTION_BLOCK " .equalsIgnoreCase(skipped);
      String blockName = sc.next();
      skipped = sc.next();
      assert " VAR_INPUT " .equalsIgnoreCase(skipped);
      String variableName = sc.next();
      skipped = sc.next();
      assert " : " .equalsIgnoreCase(skipped);
      String type = sc.next();
      skipped = sc.next();
      assert " END_VAR " .equalsIgnoreCase(skipped);
      skipped = sc.next();
      assert " END_FUNCTION_BLOCK " .equalsIgnoreCase(skipped);

      assert " Unnamed_project " .equals(blockName);
      assert " Unnamed_variable1 " .equals(variableName);
      assert " REAL " .equals(type);
      }
      }

      ---------- END SOURCE ----------

      CUSTOMER SUBMITTED WORKAROUND :
      manually checking the keywords as provided in the second test

            sherman Xueming Shen
            webbuggrp Webbug Group
            Votes:
            0 Vote for this issue
            Watchers:
            1 Start watching this issue

              Created:
              Updated: