Skip to main content
Code Review

Return to Answer

added 2696 characters in body
Source Link
Reinderien
  • 71k
  • 5
  • 76
  • 256
  • a Main class that only cares about display and does your program loop
  • a StringInfo class that does no integrated display at allin its logic methods, and has accessor functions for reversed (returning a string and not printing), isPalindrome (returning a boolean and not printing), spaceCount (returning an integer and not printing), etc.

Suggested

import java.util.Scanner;
public class Main {
 final Scanner userInput = new Scanner(System.in);
 public static void main(String[] args) {
 Main app = new Main();
 printInstructions();
 app.programLoop();
 printSeparator();
 }
 // Prints starting instructions.
 public static void printInstructions() {
 System.out.println("StringModifier - Reverses a string and returns information about it.");
 System.out.println("Type '!break' to exit");
 }
 // Main program loop.
 public void programLoop() {
 // If the input isn't the break command, it processes and prints out the results.
 while (true) {
 printSeparator();
 System.out.print("-: ");
 String definedString = userInput.nextLine();
 if (definedString.equals("!break"))
 break;
 (new StringInfo(definedString)).dump();
 }
 }
 // Adds a separating line.
 public static void printSeparator() {
 System.out.println("—————————————————————————————————————");
 }
}
public class StringInfo {
 public final String definedString;
 public StringInfo(String definedString) {
 this.definedString = definedString;
 }
 public String reversed() {
 StringBuilder builder = new StringBuilder(definedString);
 builder.reverse();
 return builder.toString();
 }
 public long nSpaces() {
 return definedString.chars().filter(ch -> Character.isSpaceChar(ch)).count();
 }
 public long nLetters() {
 return definedString.chars().filter(ch -> Character.isLetter(ch)).count();
 }
 public long nDigits() {
 return definedString.chars().filter(ch -> Character.isDigit(ch)).count();
 }
 public long nOther() {
 return definedString.chars().filter(ch -> !(
 Character.isSpaceChar(ch)
 || Character.isLetter(ch)
 || Character.isDigit(ch)
 )).count();
 }
 public boolean isPalindrome() {
 return definedString.equals(reversed());
 }
 public void dump() {
 System.out.printf("Reversed String: %s%n", reversed());
 System.out.printf("Spaces: %d%n", nSpaces());
 System.out.printf("Digits: %d%n", nDigits());
 System.out.printf("Letters: %d%n", nLetters());
 System.out.printf("Other: %d%n", nOther());
 System.out.print("Is a palindrome: ");
 if (isPalindrome()) System.out.println("yes");
 else System.out.println("no");
 }
}
  • a Main class that only cares about display and does your program loop
  • a StringInfo class that does no display at all, and has accessor functions for reversed (returning a string and not printing), isPalindrome (returning a boolean and not printing), spaceCount (returning an integer and not printing), etc.
  • a Main class that only cares about display and does your program loop
  • a StringInfo class that does no integrated display in its logic methods, and has accessor functions for reversed (returning a string and not printing), isPalindrome (returning a boolean and not printing), spaceCount (returning an integer and not printing), etc.

Suggested

import java.util.Scanner;
public class Main {
 final Scanner userInput = new Scanner(System.in);
 public static void main(String[] args) {
 Main app = new Main();
 printInstructions();
 app.programLoop();
 printSeparator();
 }
 // Prints starting instructions.
 public static void printInstructions() {
 System.out.println("StringModifier - Reverses a string and returns information about it.");
 System.out.println("Type '!break' to exit");
 }
 // Main program loop.
 public void programLoop() {
 // If the input isn't the break command, it processes and prints out the results.
 while (true) {
 printSeparator();
 System.out.print("-: ");
 String definedString = userInput.nextLine();
 if (definedString.equals("!break"))
 break;
 (new StringInfo(definedString)).dump();
 }
 }
 // Adds a separating line.
 public static void printSeparator() {
 System.out.println("—————————————————————————————————————");
 }
}
public class StringInfo {
 public final String definedString;
 public StringInfo(String definedString) {
 this.definedString = definedString;
 }
 public String reversed() {
 StringBuilder builder = new StringBuilder(definedString);
 builder.reverse();
 return builder.toString();
 }
 public long nSpaces() {
 return definedString.chars().filter(ch -> Character.isSpaceChar(ch)).count();
 }
 public long nLetters() {
 return definedString.chars().filter(ch -> Character.isLetter(ch)).count();
 }
 public long nDigits() {
 return definedString.chars().filter(ch -> Character.isDigit(ch)).count();
 }
 public long nOther() {
 return definedString.chars().filter(ch -> !(
 Character.isSpaceChar(ch)
 || Character.isLetter(ch)
 || Character.isDigit(ch)
 )).count();
 }
 public boolean isPalindrome() {
 return definedString.equals(reversed());
 }
 public void dump() {
 System.out.printf("Reversed String: %s%n", reversed());
 System.out.printf("Spaces: %d%n", nSpaces());
 System.out.printf("Digits: %d%n", nDigits());
 System.out.printf("Letters: %d%n", nLetters());
 System.out.printf("Other: %d%n", nOther());
 System.out.print("Is a palindrome: ");
 if (isPalindrome()) System.out.println("yes");
 else System.out.println("no");
 }
}
Source Link
Reinderien
  • 71k
  • 5
  • 76
  • 256

You should rewrite your reverseString to use the built-in StringBuilder.reverse().

Your class structure is a little bit mixed up. The Application and Main classes currently have some of the same obligations. Rephrase this to, perhaps,

  • a Main class that only cares about display and does your program loop
  • a StringInfo class that does no display at all, and has accessor functions for reversed (returning a string and not printing), isPalindrome (returning a boolean and not printing), spaceCount (returning an integer and not printing), etc.
lang-java

AltStyle によって変換されたページ (->オリジナル) /