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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© Y1011 中级黑马   /  2015-9-18 14:55  /  2961 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

10黑马币
  1. import java.util.Collection;
  2. import java.util.Iterator;
  3. import java.util.Map;
  4. import java.util.Set;
  5. import java.util.TreeMap;

  6. //“1.2,3.4,5.6,7.8,5.56,44.55”,
  7. public class test45 {
  8.         public static void main(String[] args){
  9.                 String s = "1.2,3.4,5.6,7.8,5.56,44.55";
  10.                 Map<Integer,Integer> m = new TreeMap<Integer,Integer>();
  11.                 String[] strs = s.split(",");
  12.                 for(int x =0;x<strs.length;x++){
  13.                         String[] s1 = strs[x].split(".");
  14.                         m.put(Integer.parseInt(s1[0]), Integer.parseInt(s1[1]));
  15.                 }
  16.                 Set<Integer> set = m.keySet();
  17.                 Iterator<Integer> it = set.iterator();
  18.                 while(it.hasNext()){
  19.                         System.out.println("key="+it.next());                        
  20.                 }
  21.                 Collection<Integer> c = m.values();
  22.                 Iterator<Integer> itr = c.iterator();
  23.                 while(itr.hasNext()){
  24.                         System.out.println("value="+itr.next());
  25.                 }
  26.         }
  27. }
复制代码

需求是将小数点两边的数分别作为键值存入map集合,但
String[] s1 = strs[x].split(".");
m.put(Integer.parseInt(s1[0]), Integer.parseInt(s1[1]))
这2行代码抛出ArrayIndexOutOfBoundsException,这是为什么啊?

最佳答案

查看完整内容

public class SDASDA { public static void main(String[] args){ String s = "1.2,3.4,5.6,7.8,5.56,44.55"; Map m = new TreeMap(); String[] strs = s.split(","); for(int x =0;x

4 个回复

倒序浏览
public class SDASDA {
        public static void main(String[] args){
                String s = "1.2,3.4,5.6,7.8,5.56,44.55";
                Map<Integer,Integer> m = new TreeMap<Integer,Integer>();
                String[] strs = s.split(",");
                for(int x =0;x<strs.length;x++){
                        String[] s1 = strs[x].split("\\.");
                        m.put(Integer.parseInt(s1[0]), Integer.parseInt(s1[1]));
                }
                Set<Integer> set = m.keySet();
                Iterator<Integer> it = set.iterator();
                while(it.hasNext()){
                        System.out.println("key="+it.next());                        
                }
                Collection<Integer> c = m.values();
                Iterator<Integer> itr = c.iterator();
                while(itr.hasNext()){
                        System.out.println("value="+itr.next());
                }
        }
}
回复 使用道具 举报
王鲁悦 来自手机 中级黑马 2015-9-18 16:57:45
藤椅
索引越界异常  length-1
回复 使用道具 举报
  String[] strs = s.split(","); 中的点 .  在正则表达式中代表的是任何字符,而想要用分割的话,要用转义字符“\\.”或者"[.]"  即: String[] s1 = strs[x].split("\\.");   或者 String[] s1 = strs[x].split("[.]");
例如:判断字符串是否以h开头,中间是任何字符,并以d结尾:"h.d"
                str = "h\\d";//h\d
                regex = "h.d";
                System.out.println("2." + str.matches(regex));
回复 使用道具 举报
String[] s1 = strs[x].split("[.]");
加一个转义格式,有两种
第一种加  “[]”
第二种加 “\\”
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马