Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Java

โปรแกรม Java แบ่งสตริงเป็น N ส่วนเท่ากัน

การแบ่งสตริงเป็น N ส่วนเท่ากันใน Java

แบ่งสตริงให้ได้ N ส่วนที่มีความยาวเท่ากัน ต้องตรวจสอบว่าความยาวสตริงหารด้วย N ลงตัวก่อน

อัลกอริทึม

  1. หาความยาวสตริง len = str.length()
  2. ตรวจสอบ len % N == 0 หากไม่ลงตัว → แจ้งข้อผิดพลาด
  3. คำนวณขนาดแต่ละส่วน partSize = len / N
  4. วนลูปดึงสับสตริงทุก 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 ได้ ไม่ควบคุมขนาดส่วนได้ตรง