1) you'll need to escape the * with \ (and again with \ because it's a Java string): \\*. That's because * is a regex meta character.
2) check out negative lookahead and/or negative lookbehind in the Javadocs of java.util.regex.Pattern. Basically you want to split on * except when it follows (and/or precedes?) #. That's exactly what those two techniques are for.