ulvis.paste.net

Paste Search Dynamic
Recent pastes
Scanner
  1. import java.util.*;
  2. import java.util.Scanner;
  3.  
  4. public class ParseXML
  5. {
  6.    static int indent;
  7.  
  8. public static void main(string[] args){
  9.      Scanner in = new Scanner(system.in);
  10.      Stack<String> name = new Stack<String>();
  11.      indent = 0;
  12.      while (in.hasNextLine()){
  13.          if(checkOpen(in)){
  14.              printIndent(in);
  15.              printToken(in);
  16.              name.push(returnNameTag(in));
  17.              indent = indent + 4;
  18.          }
  19.          else if(checkClose(in)) {
  20.              indent = indent - 4;
  21.              printIndent(in);
  22.              printToken(in);
  23.              if(name.empty()) {
  24.                 system.out.println("A Closing Tag does not match its opening tag");
  25.                 system.exit(0);
  26.             }
  27.             string temp = name.pop();
  28.             if(!returnNameTag(in).equals(temp)){
  29.                 system.out.println("A Closing Tag does not match its opening tag");
  30.                 system.exit(0);
  31.             }
  32.         }
  33.         else {
  34.             printIndent(in);
  35.             printToken(in);
  36.         }
  37.     }
  38.     if(!name.empty()) {
  39.         system.out.println("There are opening tags with no matching closing tags");
  40.     }
  41.  
  42.  }
  43.  
  44.  public static boolean checkOpen(Scanner in) {
  45.      string token = in.next();
  46.      boolean lessThan = false;
  47.      boolean greaterThan = false;
  48.      boolean isOpen = false;
  49.      string name;
  50.  
  51.      while(in.hasNext()){
  52.         if(token.equals("<"))
  53.          lessThan = true;
  54.         else if(token.equals(">"))
  55.           greaterThan = true;
  56.         else if(token.equals("/"))
  57.           return false;
  58.     }
  59.  
  60.    if(lessThan == true && greaterThan == true)
  61.    return true;
  62.    else
  63.    return false;
  64.  
  65.   }
  66.  
  67.  
  68.  
  69.  
  70.  public static boolean checkClose(Scanner in) {
  71.      string token = in.next();
  72.      boolean lessThan = false;
  73.      boolean greaterThan = false;
  74.      boolean isOpen = false;
  75.      boolean slash = false;
  76.      string name;
  77.  
  78.      while(in.hasNext()){
  79.         if(token.equals("<"))
  80.          lessThan = true;
  81.         else if(token.equals(">"))
  82.           greaterThan = true;
  83.         else if(token.equals("/"))
  84.           slash = true;;
  85.     }
  86.  
  87.    if(lessThan == true && greaterThan == true && slash == true)
  88.    return true;
  89.    else
  90.    return false;
  91.  
  92.  
  93.  }
  94.  
  95.  public static void printToken(Scanner in){
  96.      string tag = "";
  97.  
  98.      while(in.hasNext()){
  99.          tag = tag + in.next();
  100.      }
  101.  
  102.     system.out.println(tag);
  103.  
  104.  }
  105.  
  106.  public static string returnNameTag(Scanner in) {
  107.      string tag = "";
  108.  
  109.      while(in.hasNext()) {
  110.          if(!in.next().equals("<") && !in.next().equals("<") && !in.next().equals("/"))
  111.          tag += in.next();
  112.  
  113.      }
  114.  
  115.      return tag;
  116.  
  117.  
  118.  }
  119.  
  120.  public static void printIndent(Scanner in){
  121.      string space = " ";
  122.      int count = 0;
  123.  
  124.      while(count<indent){
  125.         system.out.print(space);
  126.         count++;
  127.     }
  128.  
  129.  }
  130.  
  131. }
Parsed in 0.065 seconds