Starts moving parsing to its own class
This commit is contained in:
		| @@ -11,6 +11,8 @@ import java.util.List; | |||||||
| import java.util.Scanner; | import java.util.Scanner; | ||||||
| import java.util.function.Predicate; | import java.util.function.Predicate; | ||||||
|  |  | ||||||
|  | import static ffmpegconverter.Parser.tokenize; | ||||||
|  |  | ||||||
| /** | /** | ||||||
|  * Converts a files or files in a folder to a web playable mp4. |  * Converts a files or files in a folder to a web playable mp4. | ||||||
|  */ |  */ | ||||||
| @@ -165,52 +167,6 @@ public class Main { | |||||||
|         } |         } | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     /** |  | ||||||
|      * Tokenizes a string |  | ||||||
|      * @param input <p>A string.</p> |  | ||||||
|      * @return <p>A list of tokens.</p> |  | ||||||
|      */ |  | ||||||
|     private static List<String> tokenizer(String input) { |  | ||||||
|         List<String> tokens = new ArrayList<>(); |  | ||||||
|         boolean startedQuote = false; |  | ||||||
|         StringBuilder currentToken = new StringBuilder(); |  | ||||||
|         for (int i = 0; i < input.length(); i++) { |  | ||||||
|             char c = input.charAt(i); |  | ||||||
|             switch (c) { |  | ||||||
|                 case ' ': |  | ||||||
|                     if (!startedQuote) { |  | ||||||
|                         //If not inside "", a space marks the end of a parameter |  | ||||||
|                         if (!currentToken.toString().trim().equals("")) { |  | ||||||
|                             tokens.add(currentToken.toString()); |  | ||||||
|                             currentToken = new StringBuilder(); |  | ||||||
|                         } else { |  | ||||||
|                             currentToken = new StringBuilder(); |  | ||||||
|                         } |  | ||||||
|                     } else { |  | ||||||
|                         currentToken.append(c); |  | ||||||
|                     } |  | ||||||
|                     break; |  | ||||||
|                 case '"': |  | ||||||
|                     if (startedQuote) { |  | ||||||
|                         if (!currentToken.toString().trim().equals("")) { |  | ||||||
|                             tokens.add(currentToken.toString()); |  | ||||||
|                             currentToken = new StringBuilder(); |  | ||||||
|                         } |  | ||||||
|                         startedQuote = false; |  | ||||||
|                     } else { |  | ||||||
|                         startedQuote = true; |  | ||||||
|                         currentToken = new StringBuilder(); |  | ||||||
|                     }   break; |  | ||||||
|                 default: |  | ||||||
|                     currentToken.append(c); |  | ||||||
|                     if (i == input.length() - 1) { |  | ||||||
|                         tokens.add(currentToken.toString()); |  | ||||||
|                     }   break; |  | ||||||
|             } |  | ||||||
|         } |  | ||||||
|         return tokens; |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     /** |     /** | ||||||
|      * Initializes the anime converter |      * Initializes the anime converter | ||||||
|      * @throws IOException <p>If reading or writing fails.</p> |      * @throws IOException <p>If reading or writing fails.</p> | ||||||
| @@ -261,7 +217,7 @@ public class Main { | |||||||
|      * @return <p>A list of tokens.</p> |      * @return <p>A list of tokens.</p> | ||||||
|      */ |      */ | ||||||
|     private static List<String> readInput(int max) { |     private static List<String> readInput(int max) { | ||||||
|         List<String> tokens =  tokenizer(READER.nextLine()); |         List<String> tokens =  tokenize(READER.nextLine()); | ||||||
|         if (max < tokens.size()) { |         if (max < tokens.size()) { | ||||||
|             throw new IllegalArgumentException("Input contains " + tokens.size() + |             throw new IllegalArgumentException("Input contains " + tokens.size() + | ||||||
|                     " arguments, but the input only supports " + max + " arguments."); |                     " arguments, but the input only supports " + max + " arguments."); | ||||||
|   | |||||||
							
								
								
									
										53
									
								
								src/main/java/ffmpegconverter/Parser.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										53
									
								
								src/main/java/ffmpegconverter/Parser.java
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,53 @@ | |||||||
|  | package ffmpegconverter; | ||||||
|  |  | ||||||
|  | import java.util.ArrayList; | ||||||
|  | import java.util.List; | ||||||
|  |  | ||||||
|  | public class Parser { | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * Tokenizes a string | ||||||
|  |      * @param input <p>A string.</p> | ||||||
|  |      * @return <p>A list of tokens.</p> | ||||||
|  |      */ | ||||||
|  |     public static List<String> tokenize(String input) { | ||||||
|  |         List<String> tokens = new ArrayList<>(); | ||||||
|  |         boolean startedQuote = false; | ||||||
|  |         StringBuilder currentToken = new StringBuilder(); | ||||||
|  |         for (int i = 0; i < input.length(); i++) { | ||||||
|  |             char c = input.charAt(i); | ||||||
|  |             switch (c) { | ||||||
|  |                 case ' ': | ||||||
|  |                     if (!startedQuote) { | ||||||
|  |                         //If not inside "", a space marks the end of a parameter | ||||||
|  |                         if (!currentToken.toString().trim().equals("")) { | ||||||
|  |                             tokens.add(currentToken.toString()); | ||||||
|  |                             currentToken = new StringBuilder(); | ||||||
|  |                         } else { | ||||||
|  |                             currentToken = new StringBuilder(); | ||||||
|  |                         } | ||||||
|  |                     } else { | ||||||
|  |                         currentToken.append(c); | ||||||
|  |                     } | ||||||
|  |                     break; | ||||||
|  |                 case '"': | ||||||
|  |                     if (startedQuote) { | ||||||
|  |                         if (!currentToken.toString().trim().equals("")) { | ||||||
|  |                             tokens.add(currentToken.toString()); | ||||||
|  |                             currentToken = new StringBuilder(); | ||||||
|  |                         } | ||||||
|  |                         startedQuote = false; | ||||||
|  |                     } else { | ||||||
|  |                         startedQuote = true; | ||||||
|  |                         currentToken = new StringBuilder(); | ||||||
|  |                     }   break; | ||||||
|  |                 default: | ||||||
|  |                     currentToken.append(c); | ||||||
|  |                     if (i == input.length() - 1) { | ||||||
|  |                         tokens.add(currentToken.toString()); | ||||||
|  |                     }   break; | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  |         return tokens; | ||||||
|  |     } | ||||||
|  | } | ||||||
		Reference in New Issue
	
	Block a user