diff --git a/src/main/java/com/thealgorithms/strings/Alphabetical.java b/src/main/java/com/thealgorithms/strings/Alphabetical.java index de07dde2d510..ef2974eb427d 100644 --- a/src/main/java/com/thealgorithms/strings/Alphabetical.java +++ b/src/main/java/com/thealgorithms/strings/Alphabetical.java @@ -1,36 +1,32 @@ package com.thealgorithms.strings; /** + * Utility class for checking if a string's characters are in alphabetical order. + *

* Alphabetical order is a system whereby character strings are placed in order * based on the position of the characters in the conventional ordering of an - * alphabet. Wikipedia: https://en.wikipedia.org/wiki/Alphabetical_order + * alphabet. + *

+ * Reference: Wikipedia: Alphabetical Order */ -final class Alphabetical { +public final class Alphabetical { private Alphabetical() { } - public static void main(String[] args) { - assert !isAlphabetical("123abc"); - assert isAlphabetical("aBC"); - assert isAlphabetical("abc"); - assert !isAlphabetical("xyzabc"); - assert isAlphabetical("abcxyz"); - } - /** - * Check if a string is alphabetical order or not + * Checks whether the characters in the given string are in alphabetical order. + * Non-letter characters will cause the check to fail. * - * @param s a string - * @return {@code true} if given string is alphabetical order, otherwise - * {@code false} + * @param s the input string + * @return {@code true} if all characters are in alphabetical order (case-insensitive), otherwise {@code false} */ public static boolean isAlphabetical(String s) { s = s.toLowerCase(); for (int i = 0; i < s.length() - 1; ++i) { - if (!Character.isLetter(s.charAt(i)) || !(s.charAt(i) <= s.charAt(i + 1))) { + if (!Character.isLetter(s.charAt(i)) || s.charAt(i) > s.charAt(i + 1)) { return false; } } - return true; + return !s.isEmpty() && Character.isLetter(s.charAt(s.length() - 1)); } } diff --git a/src/test/java/com/thealgorithms/strings/AlphabeticalTest.java b/src/test/java/com/thealgorithms/strings/AlphabeticalTest.java index 083239152ec2..7b41e11ef22f 100644 --- a/src/test/java/com/thealgorithms/strings/AlphabeticalTest.java +++ b/src/test/java/com/thealgorithms/strings/AlphabeticalTest.java @@ -1,30 +1,15 @@ package com.thealgorithms.strings; -import static org.junit.jupiter.api.Assertions.assertFalse; -import static org.junit.jupiter.api.Assertions.assertTrue; +import static org.junit.jupiter.api.Assertions.assertEquals; -import org.junit.jupiter.api.Test; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.CsvSource; public class AlphabeticalTest { - @Test - public void isAlphabetical() { - // expected to be true - String input1 = "abcdefghijklmno"; - String input2 = "abcdxxxyzzzz"; - String input3 = "fpw"; - - // expected to be false - String input4 = "123a"; - String input5 = "abcABC"; - String input6 = "abcdefghikjlmno"; - - assertTrue(Alphabetical.isAlphabetical(input1)); - assertTrue(Alphabetical.isAlphabetical(input2)); - assertTrue(Alphabetical.isAlphabetical(input3)); - - assertFalse(Alphabetical.isAlphabetical(input4)); - assertFalse(Alphabetical.isAlphabetical(input5)); - assertFalse(Alphabetical.isAlphabetical(input6)); + @ParameterizedTest(name = "\"{0}\" → Expected: {1}") + @CsvSource({"'abcdefghijklmno', true", "'abcdxxxyzzzz', true", "'123a', false", "'abcABC', false", "'abcdefghikjlmno', false", "'aBC', true", "'abc', true", "'xyzabc', false", "'abcxyz', true", "'', false", "'1', false"}) + void testIsAlphabetical(String input, boolean expected) { + assertEquals(expected, Alphabetical.isAlphabetical(input)); } }