String manipulation: Giving a string input, containing comments, implement a method to output the given string excluding the comments.
Anonimo
public class RemoveCommentFromString { public enum State { OutsideComment, InsideLineComment, InsideBlockComment, InsideBlockCommentNoNewLineYet } public static String removeComments(String str) { State state = State.OutsideComment; StringBuilder endResult = new StringBuilder(); Scanner s = new Scanner(str); s.useDelimiter(""); while (s.hasNext()) { String c = s.next(); switch (state) { case OutsideComment: if (c.equals("/") && s.hasNext()) { String c2 = s.next(); if (c2.equals("/")) { state = State.InsideLineComment; } else if (c2.equals("*")) { state = State.InsideBlockCommentNoNewLineYet; } else { endResult.append(c).append(c2); } } else { endResult.append(c); } break; case InsideLineComment: if (c.equals("\n")) { endResult.append("\n"); state = State.OutsideComment; } break; case InsideBlockCommentNoNewLineYet: if (c.equals("\n")) { endResult.append("\n"); state = State.InsideBlockComment; } break; case InsideBlockComment: if (c.equals("*") && s.hasNext()) { String c2 = s.next(); if (c2.equals("/")) { state = State.OutsideComment; } } break; } } return endResult.toString(); } public static void main(String[] args) { String str = "start_code();// first comment\n" + "more_code(); /* block comment\n" + "second line of block comment */\n" + "more_code_after_block();"; System.out.println("Scanner: " + removeComments(str)); } }