[shift-char-in-string] rotate a string (#15441)
This commit is contained in:
parent
4b1e73b005
commit
ca584307b2
@ -0,0 +1,5 @@
|
||||
## Java String Algorithms
|
||||
|
||||
This module contains articles about string-related algorithms.
|
||||
|
||||
### Relevant Articles:
|
14
core-java-modules/core-java-string-algorithms-4/pom.xml
Normal file
14
core-java-modules/core-java-string-algorithms-4/pom.xml
Normal file
@ -0,0 +1,14 @@
|
||||
<project xmlns="http://maven.apache.org/POM/4.0.0"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
<artifactId>core-java-string-algorithms-4</artifactId>
|
||||
<name>core-java-string-algorithms-4</name>
|
||||
<packaging>jar</packaging>
|
||||
|
||||
<parent>
|
||||
<groupId>com.baeldung.core-java-modules</groupId>
|
||||
<artifactId>core-java-modules</artifactId>
|
||||
<version>0.0.1-SNAPSHOT</version>
|
||||
</parent>
|
||||
</project>
|
@ -0,0 +1,100 @@
|
||||
package com.baeldung.string.shiftchar;
|
||||
|
||||
import static org.junit.jupiter.api.Assertions.assertEquals;
|
||||
import static org.junit.jupiter.api.Assertions.assertFalse;
|
||||
import static org.junit.jupiter.api.Assertions.assertTrue;
|
||||
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
public class ShiftCharInStringUnitTest {
|
||||
|
||||
private final static String STRING = "abcdefg";
|
||||
|
||||
private final static String EXPECT_1X = "gabcdef";
|
||||
private final static String EXPECT_2X = "fgabcde";
|
||||
private final static String EXPECT_3X = "efgabcd";
|
||||
private final static String EXPECT_6X = "bcdefga";
|
||||
private final static String EXPECT_7X = "abcdefg";
|
||||
private final static String EXPECT_24X = "efgabcd";
|
||||
|
||||
private final static String B_EXPECT_1X = "bcdefga";
|
||||
private final static String B_EXPECT_2X = "cdefgab";
|
||||
private final static String B_EXPECT_3X = "defgabc";
|
||||
private final static String B_EXPECT_6X = "gabcdef";
|
||||
private final static String B_EXPECT_7X = "abcdefg";
|
||||
private final static String B_EXPECT_24X = "defgabc";
|
||||
|
||||
static String rotateString1(String s, int c, boolean forward) {
|
||||
if (c < 0) {
|
||||
throw new IllegalArgumentException("Rotation character count cannot be negative!");
|
||||
}
|
||||
int len = s.length();
|
||||
int n = c % len;
|
||||
if (n == 0) {
|
||||
return s;
|
||||
}
|
||||
n = forward ? n : len - n;
|
||||
return s.substring(len - n, len) + s.substring(0, len - n);
|
||||
}
|
||||
|
||||
static String rotateString2(String s, int c, boolean forward) {
|
||||
if (c < 0) {
|
||||
throw new IllegalArgumentException("Rotation character count cannot be negative!");
|
||||
}
|
||||
int len = s.length();
|
||||
int n = c % len;
|
||||
if (n == 0) {
|
||||
return s;
|
||||
}
|
||||
String ss = s + s;
|
||||
n = forward ? n : len - n;
|
||||
return ss.substring(len - n, 2 * len - n);
|
||||
}
|
||||
|
||||
static boolean rotatedFrom(String rotated, String rotateFrom) {
|
||||
return rotateFrom.length() == rotated.length() && (rotateFrom + rotateFrom).contains(rotated);
|
||||
}
|
||||
|
||||
@Test
|
||||
void whenUsingRotateString1_thenGetExpectedResults() {
|
||||
assertEquals(EXPECT_1X, rotateString1(STRING, 1, true));
|
||||
assertEquals(EXPECT_2X, rotateString1(STRING, 2, true));
|
||||
assertEquals(EXPECT_3X, rotateString1(STRING, 3, true));
|
||||
assertEquals(EXPECT_6X, rotateString1(STRING, 6, true));
|
||||
assertEquals(EXPECT_7X, rotateString1(STRING, 7, true));
|
||||
assertEquals(EXPECT_24X, rotateString1(STRING, 24, true));
|
||||
|
||||
//backward
|
||||
assertEquals(B_EXPECT_1X, rotateString1(STRING, 1, false));
|
||||
assertEquals(B_EXPECT_2X, rotateString1(STRING, 2, false));
|
||||
assertEquals(B_EXPECT_3X, rotateString1(STRING, 3, false));
|
||||
assertEquals(B_EXPECT_6X, rotateString1(STRING, 6, false));
|
||||
assertEquals(B_EXPECT_7X, rotateString1(STRING, 7, false));
|
||||
assertEquals(B_EXPECT_24X, rotateString1(STRING, 24, false));
|
||||
}
|
||||
|
||||
@Test
|
||||
void whenUsingShiftString2_thenGetExpectedResults() {
|
||||
assertEquals(EXPECT_1X, rotateString2(STRING, 1, true));
|
||||
assertEquals(EXPECT_2X, rotateString2(STRING, 2, true));
|
||||
assertEquals(EXPECT_3X, rotateString2(STRING, 3, true));
|
||||
assertEquals(EXPECT_6X, rotateString2(STRING, 6, true));
|
||||
assertEquals(EXPECT_7X, rotateString2(STRING, 7, true));
|
||||
assertEquals(EXPECT_24X, rotateString2(STRING, 24, true));
|
||||
|
||||
//backward
|
||||
assertEquals(B_EXPECT_1X, rotateString2(STRING, 1, false));
|
||||
assertEquals(B_EXPECT_2X, rotateString2(STRING, 2, false));
|
||||
assertEquals(B_EXPECT_3X, rotateString2(STRING, 3, false));
|
||||
assertEquals(B_EXPECT_6X, rotateString2(STRING, 6, false));
|
||||
assertEquals(B_EXPECT_7X, rotateString2(STRING, 7, false));
|
||||
assertEquals(B_EXPECT_24X, rotateString2(STRING, 24, false));
|
||||
}
|
||||
|
||||
@Test
|
||||
void whenUsingRotateFrom_thenGetExpectedResults() {
|
||||
assertTrue(rotatedFrom(EXPECT_7X, STRING));
|
||||
assertTrue(rotatedFrom(B_EXPECT_3X, STRING));
|
||||
assertFalse(rotatedFrom("abcefgd", STRING));
|
||||
}
|
||||
}
|
@ -65,7 +65,6 @@
|
||||
<module>core-java-streams-5</module>
|
||||
<module>core-java-streams-collect</module>
|
||||
<module>core-java-streams-maps</module>
|
||||
<module>core-java-string-algorithms-3</module>
|
||||
<!--<module>core-java-string-operations-3</module>--> <!-- failing after upgrading to jdk17 -->
|
||||
<module>core-java-string-operations-4</module>
|
||||
<!--<module>core-java-string-operations-5</module>--> <!-- failing after upgrading to jdk17 -->
|
||||
@ -185,6 +184,8 @@
|
||||
<module>core-java-streams-3</module>
|
||||
<module>core-java-string-algorithms</module>
|
||||
<module>core-java-string-algorithms-2</module>
|
||||
<module>core-java-string-algorithms-3</module>
|
||||
<module>core-java-string-algorithms-4</module>
|
||||
<module>core-java-string-apis</module>
|
||||
<!--<module>core-java-string-apis-2</module>--> <!-- failing after upgrading to jdk17 -->
|
||||
<module>core-java-swing</module>
|
||||
|
Loading…
x
Reference in New Issue
Block a user