- 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");
}
}
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