面试题1 怎样截取字符串?

版权声明:本文为大都督作者的原创文章,未经 大都督 允许也可以转载,但请注明出处,谢谢! 共勉! https://blog.csdn.net/qq_37335220/article/details/85328873

怎样截取字符串?

1.题述:

编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串。 但是要保证汉字不被截半个,如“我ABC”4,应该截为“我AB”, 输入“我ABC汉DEF”6,应该输出“我ABC”,而不是“我ABC+汉的半个”。

2.测试结果:
请输入字符串:
我ABC汉DEFNI你好啊abcde你好啊啊sbsd
请输入字节数:
6
以每6字节划分的字符串如下所示:
我ABC
汉DEFN
I你好
啊abcd
e你好
啊啊sb
sd
subStrList[0]:我ABC
subStrList[1]:汉DEFN
subStrList[2]:I你好
subStrList[3]:啊abcd
subStrList[4]:e你好
subStrList[5]:啊啊sb
subStrList[6]:sd
2.Java代码
package com.example.demo.interviewQuestions;

import java.util.ArrayList;
import java.util.Scanner;

import org.assertj.core.util.Lists;


/**
 * @Description	截取字符串 
 * @author 大都督
 * @date 2018年12月28日
 */
public class StringQuestion {

	/**
	 * 编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串。
	 * 但是要保证汉字不被截半个,如“我ABC”4,应该截为“我AB”,
	 * 输入“我ABC汉DEF”6,应该输出“我ABC”,而不是“我ABC+汉的半个”。
	 */
	
	//要进行截取操作的字符串
	static String ss;
	//截取的字符串的字节数
	static int n;
	
	@SuppressWarnings("resource")
	public static void main(String[] args) {
		System.out.println("请输入字符串:");
		//从键盘获取字符串
		Scanner scStr = new Scanner(System.in);
		//将Scanner对象中的内容以字符串的形式取出来
		ss = scStr.next();
		System.out.println("请输入字节数:");
		//从键盘获取字符串
		Scanner scByte = new Scanner(System.in);
		//将Scanner对象中的内容以数值的形式取出来
		n = scByte.nextInt();
		//方法与方法间的套用
		ArrayList<String> subStrList = getSubStrList(str2Arr());
		if (subStrList != null && subStrList.size() > 0) {
			for (int i=0; i<subStrList.size(); i++) {
				System.out.println();
				System.out.print("subStrList["+i+"]:"+subStrList.get(i));
			}
		}
	}

	/**
	 * 
	* @Title: getSubStrList 
	* @Description:根据字符数组,返回指定字节数的子字符串集合 
	* @param arr
	* @return 
	* @author 大都督
	* @date 2018年12月28日
	* @return ArrayList<String>
	 */
	private static ArrayList<String> getSubStrList(String[] arr) {
		ArrayList<String> arrayList = Lists.newArrayList();
		String str = "";
		int count = 0;
		//汉字的正则表达式
		String m = "[\u4e00-\u9fa5]";
		System.out.println("以每"+n+"字节划分的字符串如下所示:");
		for (int i=0; i<arr.length; i++) {
			//如果是汉字
			boolean matches = arr[i].matches(m);
			if (matches) {
				count = count+2;
			}else {
				count = count+1;
			}
			//如果count小于n,则输出当前字符
			if (count < n) {
				System.out.print(arr[i]);
				str += arr[i];
				if (i == (arr.length-1)) {
					arrayList.add(str);
				}
			}else if (count == n && !matches) {
				System.out.print(arr[i]);
				str += arr[i];
				arrayList.add(str);
				count = 0;
				str = "";
				//换行,控制打印格式
				System.out.println();
			}else if (count == n && matches){
				System.out.println();
				System.out.print(arr[i]);
				str += arr[i];
				arrayList.add(str);
				count = 0;
				str = "";
			}else if (count > n && matches) {//我ABC汉DEF	我ABC汉DEFNI你好啊abcd
				System.out.println();
				System.out.print(arr[i]);
				arrayList.add(str);
				count = 2;
				str = arr[i];
			}else {
				arrayList.add(str);
				System.out.println();
				count = 0;
				str = "";
			}
		}
		return arrayList;
	}

	/**
	 * 
	* @Title: str2Arr 
	* @Description:将字符串转换成字符串数组 
	* @return 
	* @author 大都督
	* @date 2018年12月28日
	* @return String[]
	 */
	private static String[] str2Arr() {
		//创建一个字符数组
		String[] arr = new String[ss.length()];
		for (int i=0; i<arr.length; i++) {
			//将字符串ss中的第i个字符取出,放入字符数组中string中
			arr[i] = ss.substring(i, i+1);
		}
		return arr;
	}

}

猜你喜欢

转载自blog.csdn.net/qq_37335220/article/details/85328873