การแบ่งสตริงเป็น N ส่วนเท่ากันใน Java
แบ่งสตริงให้ได้ N ส่วนที่มีความยาวเท่ากัน ต้องตรวจสอบว่าความยาวสตริงหารด้วย N ลงตัวก่อน
อัลกอริทึม
- หาความยาวสตริง
len = str.length() - ตรวจสอบ
len % N == 0หากไม่ลงตัว → แจ้งข้อผิดพลาด - คำนวณขนาดแต่ละส่วน
partSize = len / N - วนลูปดึงสับสตริงทุก
partSizeตัวอักษร
ตัวอย่างที่ 1: ใน main โดยตรง
public class Demo {
public static void main(String[] args) {
String inputString = "Java Program is fun!";
System.out.println("สตริงต้นฉบับ: " + inputString);
int stringLength = inputString.length();
System.out.println("ความยาวสตริง: " + stringLength);
int N = 4;
int temp = 0;
int partSize = stringLength / N;
String[] equalParts = new String[N];
if (stringLength % N != 0) {
System.out.println("ไม่สามารถแบ่งสตริงเป็น " + N + " ส่วนเท่ากันได้");
} else {
for (int i = 0; i < stringLength; i += partSize) {
String part = inputString.substring(i, i + partSize);
equalParts[temp++] = part;
}
System.out.println(N + " ส่วนเท่ากันของสตริง:");
for (String part : equalParts) {
System.out.println(part);
}
}
}
}
ผลลัพธ์
สตริงต้นฉบับ: Java Program is fun!
ความยาวสตริง: 20
4 ส่วนเท่ากันของสตริง:
Java
Progr
am is
fun!
ตัวอย่างที่ 2: แบบ OOP (Encapsulation)
public class Demo {
static void divideString(String inputString, int N) {
int length = inputString.length();
System.out.println("ความยาวสตริง: " + length);
if (length % N != 0) {
System.out.println("ไม่สามารถแบ่งสตริงเป็น " + N + " ส่วนเท่ากันได้");
return;
}
int partSize = length / N;
String[] parts = new String[N];
for (int i = 0; i < length; i += partSize) {
parts[i / partSize] = inputString.substring(i, i + partSize);
}
System.out.println(N + " ส่วนเท่ากัน:");
for (String part : parts) {
System.out.println("[" + part + "]");
}
}
public static void main(String[] args) {
String input = "Java Program is fun!";
System.out.println("สตริงต้นฉบับ: " + input);
divideString(input, 4);
System.out.println("\n--- ทดสอบกรณีไม่หารลงตัว ---");
divideString("Hello World", 3); // 11 % 3 != 0
}
}
วิธีทันสมัยด้วย Stream (Java 8+)
import java.util.stream.*;
public class ModernSplit {
public static String[] splitEqualParts(String input, int N) {
int len = input.length();
if (len % N != 0) {
throw new IllegalArgumentException("ความยาว " + len + " ไม่หาร " + N + " ลงตัว");
}
int partSize = len / N;
return IntStream.range(0, N)
.mapToObj(i -> input.substring(i * partSize, (i + 1) * partSize))
.toArray(String[]::new);
}
public static void main(String[] args) {
String str = "Java Program is fun!";
String[] parts = splitEqualParts(str, 4);
Arrays.stream(parts).forEach(System.out::println);
}
}
กรณีพิเศษ: แบ่งตามคำ (Word boundaries)
// หากต้องการแบ่งตามคำ ไม่ใช่ตัวอักษร
String text = "Java Program is fun";
String[] words = text.split("\\s+");
// แล้วจัดกลุ่มคำให้ได้ N กลุ่ม...
สรุป
| วิธี | ข้อดี | ข้อจำกัด |
|---|---|---|
| Loop แบบเดิม | เข้าใจง่าย ควบคุมได้ละเอียด | โค้ดยาว |
| Stream API | กระชับ Functional style | ต้อง Java 8+ |
| Regex split | แบ่งตาม pattern ได้ | ไม่ควบคุมขนาดส่วนได้ตรง |