Skip to content

Alternating String Casing in Java

The challenge

altERnaTIng cAsE <=> ALTerNAtiNG CaSe

Define String.prototype.toAlternatingCase (or a similar function/method such as to_alternating_case/toAlternatingCase/ToAlternatingCase in your selected language; see the initial solution for details) such that each lowercase letter becomes uppercase and each uppercase letter becomes lowercase. For example:

StringUtils.toAlternativeString("hello world") == "HELLO WORLD" StringUtils.toAlternativeString("HELLO WORLD") == "hello world" StringUtils.toAlternativeString("hello WORLD") == "HELLO world" StringUtils.toAlternativeString("HeLLo WoRLD") == "hEllO wOrld" StringUtils.toAlternativeString("12345") == "12345" // Non-alphabetical characters are unaffected StringUtils.toAlternativeString("1a2b3c4d5e") == "1A2B3C4D5E" StringUtils.toAlternativeString("StringUtils.toAlternatingCase") == "sTRINGuTILS.TOaLTERNATINGcASE"
Code language: Java (java)

As usual, your function/method should be pure, i.e. it should not mutate the original string.

The solution in Java code

Option 1:

public class StringUtils { public static String toAlternativeString(String string) { String result = ""; for (char c : string.toCharArray()) { if(Character.isUpperCase(c)) { result += Character.toLowerCase(c); } else { result += Character.toUpperCase(c); } } return result; } }
Code language: Java (java)

Option 2:

import static java.lang.Character.*; public class StringUtils { public static String toAlternativeString(String string) { return string.chars() .map(c -> isUpperCase(c) ? toLowerCase(c) : isLowerCase(c) ? toUpperCase(c) : c) .collect(StringBuilder::new, StringBuilder::appendCodePoint, StringBuilder::append) .toString(); } }
Code language: Java (java)

Option 3:

import java.util.*; public class StringUtils { public static String toAlternativeString(String str){ StringBuilder s = new StringBuilder(); str.chars() .forEach( i -> { char c = (char) i; s.append( Character.isUpperCase(c) ? Character.toLowerCase(c) : Character.toUpperCase(c)); }); return s.toString(); } }
Code language: Java (java)

Test cases to validate our solution

import static org.junit.Assert.*; public class StringUtilsTest { private static final String CHARS = "abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ 0123456789 .,;:!?/"; @Test public void fixedTests() { assertEquals("HELLO WORLD", StringUtils.toAlternativeString("hello world")); assertEquals("hello world", StringUtils.toAlternativeString("HELLO WORLD")); assertEquals("HELLO world", StringUtils.toAlternativeString("hello WORLD")); assertEquals("hEllO wOrld", StringUtils.toAlternativeString("HeLLo WoRLD")); assertEquals("Hello World", StringUtils.toAlternativeString(StringUtils.toAlternativeString("Hello World"))); assertEquals("12345", StringUtils.toAlternativeString("12345")); assertEquals("1A2B3C4D5E", StringUtils.toAlternativeString("1a2b3c4d5e")); assertEquals("sTRINGuTILS.TOaLTERNATINGcASE", StringUtils.toAlternativeString("StringUtils.toAlternatingCase")); } @Test public void kataTitleTests() { assertEquals("ALTerNAtiNG CaSe", StringUtils.toAlternativeString("altERnaTIng cAsE")); assertEquals("altERnaTIng cAsE", StringUtils.toAlternativeString("ALTerNAtiNG CaSe")); assertEquals("ALTerNAtiNG CaSe <=> altERnaTIng cAsE", StringUtils.toAlternativeString("altERnaTIng cAsE <=> ALTerNAtiNG CaSe")); assertEquals("altERnaTIng cAsE <=> ALTerNAtiNG CaSe", StringUtils.toAlternativeString("ALTerNAtiNG CaSe <=> altERnaTIng cAsE")); } @Test public void randomTests() { Random random = new Random(); for (int i = 1; i <= 50; i++) { int length = random.nextInt(30) + 1; StringBuilder stringBuilder = new StringBuilder(length); for (int k = 1; k <= length; k++) stringBuilder.append(CHARS.charAt(random.nextInt(CHARS.length()))); String testString = stringBuilder.toString(); assertEquals(solution(testString), StringUtils.toAlternativeString(testString)); } } private String solution(String string) { return string.chars().map(c -> Character.isLowerCase(c) ? Character.toUpperCase(c) : Character.toLowerCase(c)).collect(StringBuilder::new, StringBuilder::appendCodePoint, StringBuilder::append).toString(); } }
Code language: Java (java)

See also  Wordpress wp-admin use different language for user
Tags:
Subscribe
Notify of
guest
0 Comments
Inline Feedbacks
View all comments
0
Would love your thoughts, please comment.x
()
x