Skip to content

Adding analyzer feedback for Squeaky Clean concept exercise #2727

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 4 additions & 9 deletions exercises/concept/squeaky-clean/.docs/hints.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,29 +3,24 @@
## 1. Replace any spaces encountered with underscores

- [This tutorial][chars-tutorial] is useful.
- [Reference documentation][chars-docs] for `char`s is here.
- You can retrieve `char`s from a string using the [charAt][char-at] method.
- You should use a [`StringBuilder`][string-builder] to build the output string.
- See [this method][iswhitespace] for detecting spaces. Remember it is a static method.
- Check the [Character][chars-docs] documentation for a method to detect whitespaces. Remember it is a static method.
- `char` literals are enclosed in single quotes.

## 2. Convert kebab-case to camel-case

- See [this method][toupper] to convert a character to upper case.
- Check the [Character][chars-docs] documentation for a method to convert a character to upper case. Remember it is a static method.

## 3. Convert leetspeak to normal text

- See [this method][isdigit] for detecting numbers.
- Check the [Character][chars-docs] documentation for a method to detect when a character is a digit. Remember it is a static method.

## 4. Omit characters that are not letters

- See [this method][isletter] to check if a character is a letter.
- Check the [Character][chars-docs] documentation for a method to detect when a character is a letter. Remember it is a static method.

[chars-docs]: https://docs.oracle.com/en/java/javase/14/docs/api/java.base/java/lang/Character.html
[chars-tutorial]: https://docs.oracle.com/javase/tutorial/java/data/characters.html
[char-at]: https://docs.oracle.com/en/java/javase/14/docs/api/java.base/java/lang/String.html#charAt(int)
[string-builder]: https://docs.oracle.com/en/java/javase/14/docs/api/java.base/java/lang/StringBuilder.html
[iswhitespace]: https://docs.oracle.com/en/java/javase/14/docs/api/java.base/java/lang/Character.html#isWhitespace(char)
[toupper]: https://docs.oracle.com/en/java/javase/14/docs/api/java.base/java/lang/Character.html#toUpperCase(char)
[isletter]: https://docs.oracle.com/en/java/javase/14/docs/api/java.base/java/lang/Character.html#isLetter(char)
[isdigit]: https://docs.oracle.com/en/java/javase/14/docs/api/java.base/java/lang/Character.html#isDigit(char)
15 changes: 15 additions & 0 deletions exercises/concept/squeaky-clean/.meta/design.md
Original file line number Diff line number Diff line change
Expand Up @@ -27,3 +27,18 @@

- `strings`: know of the `string` type that will be iterated over and accessed by index.
- `for-loop` for loops (rather than foreach) are the best means of highlighting the relationship between strings and `char`s

## Analyzer

This exercise could benefit from the following rules in the [analyzer]:

- `actionable`: If the solution did not use `Character.isWhitespace`, instruct the student to do so, because this concept intends to teach the character concept and methods.
- `actionable`: If the solution did not use `Character.isDigit`, instruct the student to do so.
- `actionable`: If the solution did not use `Character.isLetter`, instruct the student to do so.
- `actionable`: If the solution did not use `Character.toUpperCase`, instruct the student to do so.
- `informative`: If the solution uses string concatenation instead of `StringBuilder`, inform the student that this cause a small performance and memory penalty compared to `StringBuilder`.

If the solution does not receive any of the above feedback, it must be exemplar.
Leave a `celebratory` comment to celebrate the success!

[analyzer]: https://github.com/exercism/java-analyzer
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ static String clean(String identifier) {
boolean kebab = false;
for (int i = 0; i < identifier.length(); i++) {
final char ch = identifier.charAt(i);
if (Character.isSpaceChar(ch)) {
if (Character.isWhitespace(ch)) {
cleanIdentifier.append("_");
} else if (Character.isDigit(ch)) {
cleanIdentifier.append(SqueakyClean.replaceDigit(ch));
Expand Down