A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 凝聚 中级黑马   /  2013-12-14 12:43  /  1071 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 凝聚 于 2013-12-14 13:45 编辑

package two;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.*;
public class di10 {
        public static void main(String[] args)throws Exception {
                System.out.println("请输入“字符”和要获取字符相应位置的“数字”");
                BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
                String u=br.readLine();
                int m=br.read();
                 byteSubStr(u,m);
        }
        public static void byteSubStr(String str , int len)
        {
        String s = null; //初始化字符串s,赋值为空
        if(str != null) //传入的字符串不能为空
        {
        byte[] a = null; //初始化字节数组,赋值为空
        try
        {
        a = str.getBytes("GBK"); //将字符串转化为字节数组,GBK码表,此时字节数组的长度为14
        }
        /*
        catch (UnsupportedEncodingException e) //捕捉编码失败异常
        {
        e.printStackTrace();
        }
        */
        catch (Exception e) //捕捉编码失败异常
        {
                throw new RuntimeException("错误");
        }
        //System.out.println("String length:"+a.length);打印字节数组的长度
        if(a.length <= len)
        {
        s = str; //如果要求取出的字节长度大于字节数组应有长度,则将s初始化为str
        }
        else if(len > 0)
        {
        s = new String(a, 0, len); //如果字节长度在字节数组长度范围内,则根据要求取出长度len,创建新的字符串s。
        int length = s.length(); //获取新字符串的长度
        //System.out.println(s.length());
        if(str.charAt(length - 1) != s.charAt(length-1))//如果原字符串中相应位置上的字符与
        //新字符串相应位置上的字符不相等,说明新字符串中相应位置只有半个中文,则应该讲数组指针向左移一位,形成新的子串。
        {
        if(length < 2)
        {
        s = null; //如果新字符串的长度小于2,则将新字符串赋值为空。
        }

        else
        {
        s = s.substring(0, length - 1); //将符合条件的子串复制给s
        }
        }
        }
        }
        System.out.println(s);
        }
}
这段代码我传入了两个值一个是字符串,一个是数字,如(”个户籍ghgj",6)但这个6没有起作用啊,我输入什么他还给输出什么,这是怎么回事啊?

2 个回复

倒序浏览
BufferedReader的read()方法返回的是控制台输入字符串第一个字符的ASCII值。比如你输入3,m会被赋值51。如果字符串不太长的话,len就会一直大于字符串长度从而输出原来的字符串。可以把int m=br.read(); 这句换成Integer m = Integer.parseInt(br.readLine()); 输入3,则字符串3会被解析成int类型变量,值为3。后面就可以正常截取了。
回复 使用道具 举报
回音 发表于 2013-12-14 13:18
BufferedReader的read()方法返回的是控制台输入字符串第一个字符的ASCII值。比如你输入3,m会被赋值51。如 ...

向高手致敬
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马