1. 程式人生 > 其它 >Java字串按照位元組數進行擷取

Java字串按照位元組數進行擷取

一、問題

編寫一個擷取字串的函式,輸入為一個字串和位元組數,輸出為按位元組擷取的字串。但是要保證漢字不被截半個,如"hi你好啊,joshua317" 4,應該截為"hi你",輸入"hi你好啊,joshua317" 8,應該輸出“hi,你好”,而不是“hi,你好+啊的半個”。

二、分析

容易產生困惑的是中文字元和英文字元,在這裡需要考慮漢字和英文字元的佔用位元組數問題,中文字元佔兩個位元組,英文字元佔一個位元組,理解了這個,就很容易實現了。

三、程式設計

package com.joshua317;

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        System.out.println("請輸入字串:");
        Scanner scanner = new Scanner(System.in);
        String str = scanner.next();
        System.out.println("請輸入位元組數:");
        int n = scanner.nextInt();
        interception(string2Array(str), n);
    }

    /**
     * 將字串轉成字串陣列
     * @param string
     * @return
     */
    public static String[] string2Array(String string)
    {
        String[] temp = new String[string.length()];
        for (int i = 0; i < temp.length; i++) {
            temp[i] = string.substring(i,i+1);
        }
        return temp;
    }

    /**
     * 字串按位元組數擷取
     * @param str
     * @param n
     */
    public static void interception(String[] str, int n)
    {
        int count = 0;
        String m = "[\u4e00-\u9fa5]";
        System.out.println("以每" + n +"個位元組劃分的字串如下所示:");
        for (int i=0; i < str.length; i++) {
            if (str[i].matches(m)) {
                //如果當前字元是漢子,計數器加2
                count += 2;
            } else {
                //如果當前字元不是是漢子,計數器加1
                count += 1;
            }
            //如果當前計數器的值小於n,則直接輸出當前字元
            if (count < n) {
                System.out.print(str[i]);
            } else if (count == n) {
                System.out.print(str[i]);
                count = 0;
                //滿足n個位元組後,就換行
                System.out.println();
            } else {//如果當前計數器count的值大於n,說明有漢子,換行輸出,且此時計數器count=2
                System.out.println();
                System.out.print(str[i]);
                count = 2;
            }
        }
    }
}