import java.io.InputStream; import java.io.IOException; import java.io.PrintStream; import java.net.MalformedURLException; import java.net.URL; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; import java.util.Scanner; import java.util.StringTokenizer; public class StockAnalysis { public static void main(String[] args) throws MalformedURLException, IOException, ParseException { PrintStream output = System.out; String symbol = args[0]; URL url = new URL("http://ichart.finance.yahoo.com/table.csv?s=" + symbol + "&ignore=.csv"); InputStream stream = url.openStream(); Scanner urlInput = new Scanner(stream); urlInput.nextLine(); // skip first line double highest = 0; Date dateOfHighest = null; double lowest = Double.MAX_VALUE; Date dateOfLowest = null; while (urlInput.hasNextLine()) { String line = urlInput.nextLine(); StringTokenizer tokenizer = new StringTokenizer(line, ","); SimpleDateFormat format = new SimpleDateFormat("yyyy-mm-dd"); Date date = format.parse(tokenizer.nextToken()); tokenizer.nextToken(); // skip second token double high = Double.parseDouble(tokenizer.nextToken()); double low = Double.parseDouble(tokenizer.nextToken()); if (high > highest) { highest = high; dateOfHighest = date; } if (low < lowest) { lowest = low; dateOfLowest = date; } } urlInput.close(); final double PERCENT = 100; if (dateOfLowest.before(dateOfHighest)) { double profit = PERCENT * (highest - lowest) / lowest; output.printf("If I had bought %4$s shares on %1$tm/%1$td/%1$ty%nand sold them on %2$tm/%2$td/%2$ty%nI would have made a %3$.2f%% profit%n", dateOfLowest, dateOfHighest, profit, symbol); } else { double loss = PERCENT * (highest - lowest) / highest; output.printf("If I had bought %4$s shares on %1$tm/%1$td/%1$ty%nand sold them on %2$tm/%2$td/%2$ty%nI would have made a %3$.2f%% loss%n", dateOfHighest, dateOfLowest, loss, symbol); } } }