擷取字串以多行的形式輸出

Allen-Liu發表於2017-09-07

問題描述:輸入一個字串(包括漢字和英文字母以及其他符號)以及每行的位元組數。輸出為一個字串被分割為多行輸出。

舉例:

Please input string:
dasa大大dad
Please input string number per line:
4
Print the string as 4 byte per line:
dasa
大大
dad

這裡需要注意的是:中文字元佔兩個位元組,英文字元佔一個位元組。漢字不能輸出半個(也就是說實際一行輸出的位元組等於或比要求少一個)。

java程式碼實現如下:

package test1;
import java.util.Scanner;
public class InterceptionStr 
{
	static String ss;//用於記錄輸入的字串
	static int n; //用於記錄每行輸出的位元組數
	public static void main(String[] args) 
	{
		System.out.println("Please input string:");//提示使用者輸入要擷取的字串
		Scanner inStr = new Scanner(System.in);
		ss = inStr.next();//將使用者輸入以字串的形式取出
		System.out.println("Please input string number per line:");//提示使用者輸入每行的位元組數
		Scanner inByte = new Scanner(System.in);
		n = inByte.nextInt();//以整數的形式取出使用者輸入
		interception(setValue());//呼叫函式完成格式化輸出
		
	}
	//將使用者的輸入轉換成字串陣列便於處理
	public static String[] setValue()
	{
		String[] string = new String[ss.length()];
		for (int i = 0; i < string.length; i++)
		{
			string[i] = ss.substring(i, i + 1);// 左閉右開
		}
		return string;
	}
	
	public static void interception(String[] string)
	{
		int count = 0;
		String m = "[\u4e00-\u9fa5]";//漢字的正規表示式
		System.out.println("Print the string as " + n +" byte per line:");
		for (int i = 0; i < string.length; i++)
		{
			if (string[i].matches(m))
				count += 2;//漢字佔兩個位元組
			else
				count += 1;//其他字元佔一個位元組
			if (count < n)
			System.out.print(string[i]);
			else if (count == n)
			{
				System.out.print(string[i]);
				count = 0;
				System.out.println();
			}
			else
			{
				count = 0;
				System.out.println();
			}
		}
			
	}

}



相關文章