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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 汪平乐 高级黑马   /  2013-2-19 23:30  /  2144 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 汪平乐 于 2013-2-20 12:07 编辑
  1. import java.util.Arrays;

  2. class BiStringTest13
  3. {
  4.         public static void sop(Object obj)
  5.         {        
  6.                 System.out.println(obj);
  7.         }
  8.         public static void main(String[] args)
  9.         {
  10.         
  11.                 //建立String 的字符串对象 str
  12.                 String s = "12  0 99 -7 30 4 100 13";
  13.                 System.out.println("排序前:" + s);
  14.                
  15.                 //转化成int型的数组
  16.                 String[] strarr = s.split(" ");
  17.                 int[] arr = new int[strarr.length];
  18.                 for (int x=0 ; x<strarr.length; x++ )
  19.                 {
  20.                         arr[x] = Integer.parseInt( strarr[x] );
  21.                 }

  22.                 //对int数组进行排序
  23.                 Arrays.sort(arr);

  24.                 //将排序的数组转变成String字符串并打印
  25.                  String str = "";
  26.          for (int i : arr)
  27.                  {
  28.               //将int类型数值转换为字符串
  29.               str += String.valueOf(i)+" ";
  30.          }
  31.           System.out.print("排序后" +str);
  32.         }
  33. }
复制代码
在代码arr[x] = Integer.parseInt( strarr[x] );这句出现了NumberFormatException
异常,但strarr[]自己定义成String类型了,为什么还会出现字符串不能转换为适当格式呢?

未命名.jpg (25.11 KB, 下载次数: 29)

未命名.jpg

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1 十分以下,就鼓励鼓励吧,敲的时候注意看空.

查看全部评分

5 个回复

正序浏览
所以,切的时候,最好像板凳一样,用正则表达式,
回复 使用道具 举报
收到了,自己不仔细只看27行了,没看,谢谢各位大侠!
回复 使用道具 举报
各位,要测试呀,不是靠自己想的是什么样,就是什么样的,

1、按照上面两位的回答,是第21行:   arr[x] = Integer.parseInt( strarr[x] );出了问题,说是parseInt方法里多加了两个空格,
      但是我要说的是,parseInt它只是转换strarr[x]这个值,跟外面的空格根本就不相干,
2、那现在我把这行注释掉,重新编译,运行的结果是:[12, , 0, 99, -7, 30, 4, 100, 13],大家看到没,切割后的数组元素是这样,
     第二个元素是空,也就是说,在进行切割时,没有把空格切完,所以导致了,在进行paseInt解析时报了异常,因为parseInt不能接           收空值;   .NumberFormatException: For input string: ""提示的也是这样提示的;
3、我把切割的条件该成了:    String[] strarr = s.split(" +");,表示可以切一个或多个空格;
4、重新编译,运行的结果:E:\work\day01>java BiStringTest13                                            排序前:12  0 99 -7 30 4 100 13
                                           转换成数组后:  [12, 0, 99, -7, 30, 4, 100, 13]
                                             排序后-7 0 4 12 13 30 99 100
修改后的代码为:


import java.util.Arrays;

class BiStringTest13
{
        public static void sop(Object obj)
        {        
                System.out.println(obj);
        }
        public static void main(String[] args)
        {

                //建立String 的字符串对象 str
                String s = "12  0 99 -7 30 4 100 13";//这行的12与0之间多敲了一个空格;
                System.out.println("排序前:" + s);

                //转化成int型的数组
                String[] strarr = s.split(" +");//把这里稍微修改,就Ok;
               
                int[] arr = new int[strarr.length];
                for (int x=0 ; x<strarr.length; x++ )
                {
                       arr[x] = Integer.parseInt( strarr[x] );
                }

                //对int数组进行排序
                Arrays.sort(arr);

                //将排序的数组转变成String字符串并打印
                 String str = "";
         for (int i : arr)
                 {
              //将int类型数值转换为字符串
              str += String.valueOf(i)+" ";
         }
          System.out.print("排序后" +str);
        }
}

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1 很给力!

查看全部评分

回复 使用道具 举报
有个 空格 不能转换成Integer类型 你好像打了两个空格
回复 使用道具 举报
本帖最后由 夏振博 于 2013-3-13 00:40 编辑

{:soso_e188:}
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马