An interesting technique is to not "automate the blocking", since user's will always figure away around it. Also, once they use techniques to hide it, it gets incredibly hard to clean up the mess if moderators leave it alone for a few weeks. Instead, I would fake moderator behavior by not blocking their post or immediately staring it out. instead, clean up entire sections at a time, as if a moderator is doing it. You can use automation1 to do this, just don't make it too frequent. The main advantage of this system is that users will not try to circumvent the system, since they believe its a human doing it.
Having users flag bad posts is also a good addition to the above mentioned system.
When your "censor bot" cleans up a users post, record that. You will soon begin to see certain users writing most of the bad words, you can then block/warn them.
As far as whether b** or ****, I would go for all stars since people really don't want to know what they meant, and showing (part of) it defeats the purpose of censoring in the first place.
1A mix of automation and human decision is best. You can use a bot to flag post for review, or perform the tasks its self. This depends on what you're trying to censor. If a bot does any automated work, be sure to have an appeals process for false positives.