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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 陈世涛 中级黑马   /  2012-7-5 13:02  /  1739 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

2 1 ms 2 ms 2 ms 10.1.40.125 (这些数字都是不确定的)
把上面字符串分割后分别放入数组
最好是 [0]=2 [1]=1 [2]=2 [3]=2 [4]=10.1.40.125
最低要求 [0]=2 [1]=1 ms.... [4]=10.1.40.125



5 个回复

倒序浏览
本帖最后由 田向向 于 2012-7-5 13:53 编辑

String str="2 1 ms 2 ms 2 ms 10.1.40.125 ";
        String[] strarray=str.split(" "); //split把字符串按照指定的分割符进行分割,然后返回字符串数组,我这里是按空格分割的
        for (int i = 0; i < strarray.length; i++)
            System.out.println(strarray);
楼主,我也是菜鸟是会这么一点,你要是有什么好方法,请赐教,我没用编译器写,应该不会有错误,要是有错误请拍砖。咱们版主可都是高手,你也可以跟他们请教一下,希望我的纯手工可以对你有所帮助。
回复 使用道具 举报
Matcher m=Pattern.compile("\\d+").matcher("2 1 ms 2 ms 2 ms 10.1.40.125)");
                while(m.find()){
                        System.out.println(m.group());
                }
正则表达其实我也用得不熟  这个可以把数字全部提取出来  但是后面的数就会被打打乱了  可以在以上代码之前把字符串截成一前一后两部分  后面部分就储存小数 然后对前面部分来匹配截取
回复 使用道具 举报
如果要求比较特别,或者不熟悉API
就自己写split方法呗
我看具体要求貌似是按空格分割,如果一个串中没数字,就去掉
我也不熟悉split
自己写了一个 貌似可以

public class SplitString {
        public static String[] splitString(String str){
                String[] arStr=new String[str.length()];//不知道最后会分成几份,但是总不会超过原来字符串的长度
                int count=0;
                char c;
                StringBuilder sb=new StringBuilder();
                boolean bNoNum=true;//这个boolean记录当前的String是不是没有数字
                for(int i=0;i<str.length();i++){
                        c=str.charAt(i);
                        if(c!=' '){
                                if(c>='0'&&c<='9')
                                        bNoNum=false;
                                sb.append(c);
                        }else {
                                if(!bNoNum){//有数字,输出到数组,count++,并且新建一个StringBuilder
                                        arStr[count++]=sb.toString();
                                        sb=new StringBuilder();
                                }else{//没有数字,不记录到数组,直接新建一个StringBuilder
                                        sb=new StringBuilder();
                                }
                                bNoNum=true;//这个boolean要归位
                        }
                }
                //把有效部分(不是null的)重新放到一个长度匹配的数组
                arStr[count++]=sb.toString();
                int length=0;
                for(;length<arStr.length;length++)
                        if(arStr[length]==null)
                                break;
                String[] returnStr=new String[length];
                for(int i=0;i<length;i++)
                        returnStr=arStr;
         
      return returnStr;
        }
        public static void main(String[] args){
                String[] s=splitString("2 1 ms 2 ms 2 ms 10.1.40.125");
                for(int i=0;i<s.length;i++)
                        System.out.println(s);
        }
}


然后就可以打印出
2
1
2
2
10.1.40.125


评分

参与人数 1技术分 +1 收起 理由
蒋映辉 + 1

查看全部评分

回复 使用道具 举报
String s="2 1 ms 2 ms 2 ms 10.1.40.125";
String[] arr=s.split("[\\D&&[^\\.]]+");
\D   非数字字符
&&  并且
^\\.    除了"."符号
+    若干个
用这个正则切就好了
回复 使用道具 举报
使用正则表达式是最好的方式了,楼上的方法值得借鉴。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马