Java字串按照位元組數進行擷取
阿新 • • 發佈:2021-10-25
本文為joshua317原創文章,轉載請註明:轉載自joshua317部落格https://www.joshua317.com/article/178
一、問題
編寫一個擷取字串的函式,輸入為一個字串和位元組數,輸出為按位元組擷取的字串。但是要保證漢字不被截半個,如"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; } } } }
本文為joshua317原創文章,轉載請註明:轉載自joshua317部落格https://www.joshua317.com/article/178