Đảo ngược chuỗi là câu hỏi thường gặp trong phỏng vấn Java. Interviewer có thể yêu cầu viết nhiều cách, không dùng built-in method, hoặc dùng đệ quy.
Dưới đây là các phương pháp đảo ngược chuỗi trong Java.
Đảo ngược chuỗi trong Java - Cách dễ nhất
Cách dễ nhất: dùng method reverse() của class StringBuilder.
package io.devqa.tutorials;
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.assertEquals;
class ReverseString {
String reverse(String inputString) {
return new StringBuilder(inputString).reverse().toString();
}
@Test
public void testAWord() {
assertEquals("tobor", new ReverseString().reverse("robot"));
}
}
- Tại sao override toString() trong Java
- Cách so sánh chuỗi trong Java
- Cách trích xuất số từ chuỗi
- Cách chuyển String sang Int trong Java
Đảo ngược chuỗi dùng đệ quy
Cách khác: dùng đệ quy và method charAt() của class String.
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.assertEquals;
class ReverseString {
String reverse(String inputString) {
StringBuilder reverseStringBuilder = new StringBuilder();
for (int i = inputString.length() - 1; i >= 0; i--) {
reverseStringBuilder.append(inputString.charAt(i));
}
return reverseStringBuilder.toString();
}
@Test
public void testAWord() {
assertEquals("tobor", new ReverseString().reverse("robot"));
}
}
Biến thể: dùng toCharArray() và lặp qua các ký tự:
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.assertEquals;
class ReverseString {
String reverse(String inputString) {
String outString = "";
for (char c : inputString.toCharArray()) {
outString = c + outString;
}
return outString;
}
@Test
public void testAWord() {
assertEquals("tobor", new ReverseString().reverse("robot"));
}
}
Đảo ngược chuỗi trong Java 8
import org.junit.jupiter.api.Test;
import java.util.stream.Collectors;
import java.util.stream.IntStream;
import static org.junit.jupiter.api.Assertions.assertEquals;
class ReverseString {
String reverse(String inputString) {
return IntStream.range(0, inputString.length())
.mapToObj(x -> inputString.charAt((inputString.length() - 1) - x))
.map(character -> String.valueOf(character))
.collect(Collectors.joining(""));
}
@Test
public void testAWord() {
assertEquals("tobor", new ReverseString().reverse("robot"));
}
}