哈哈我把我的发给你看看吧,我是这么做的。
package com.itheima;
import java.io.BufferedReader;
import java.io.InputStreamReader;
public class Text_10 {
/*
* 思路:
* 1,建立一个接受键盘输入的字符串方法
* 2,建立接受键盘输入的需要截取位数的方法,方法中要判断是否是数字,通过判断字符码(48-57)的方式盘判断是否是数字,
* 错了要重新输入。
* 3,建立方法来截取,输出,返回
* (1)建立接受进来的字符串的字节数组
* (2)由于汉字的编码是负数,这就提供了截取的最后以为要不要舍去的依据。
* (3)通过接受进来的需要截取的位数来判断在字节数组中初步的位置(index),然后从index位置开始向前面数,看看有多少位
* 负值(num)
* (4)判断num的奇偶性,如果是奇数那么就舍去最后一个字节建立新的需要返回的子串,反之则不用舍去最后一位。
*/
public static void main(String[] args) throws Exception{
while (true) {
String s = getString();
while(true){
int i = getBit();
getSubstring(s,i);
}
}
}
public static String getString() throws Exception{//获取键盘输入的字符串的方法
System.out.println("请输入你需要被截取的字符串:(例如:I love 黑马)");
BufferedReader buf = new BufferedReader(new InputStreamReader(System.in));
return new String(buf.readLine());
}
public static int getBit() throws Exception{//获取需要截取的位数的方法
System.out.println("请输入你需要截取的位数:");
String bit = null;
boolean flag = true;
while(flag){
BufferedReader buf = new BufferedReader(new InputStreamReader(System.in));
bit = buf.readLine();
byte[] b = bit.getBytes();
for(int i:b){
if(!(i>=48 && i<=57)){//判断是否是数字
System.out.println("输入的数字非法,请重新输入:");
flag = false;
break;
}
}
flag = !(flag);
}
return Integer.parseInt(bit);
}
//截取子串的方法
public static String getSubstring(String s,int i){
String sub = null;
byte[] b = s.getBytes();//把接受进来的字符串转换成字节数组
if (i>=b.length) {
System.out.println("您需要截取的子串长度大于等于源数据长度,所以把源数据全给你:"+s);
sub = s;
}
else{
int index = i-1;//需要截取的初始位置
int num = 0;
//从后往前寻找字节码为负数的数量
while (index >= 0 && b[index--]<0) {//判断是否是汉字字节
num++;
}
//判断负数字节的奇偶性
if (num % 2 == 1) {
sub = new String(b,0,i-1);//舍去最后以为建立子串
}
else
sub = new String(b,0,i);//不舍最后以为建立子串
}
System.out.println(sub);
return sub;
}
}
|