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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 黑马华 中级黑马   /  2013-4-30 12:37  /  1516 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 黑马华 于 2013-4-30 20:13 编辑

假设有一个集合,里面装的是字符串,但有的字符串是纯数字,我想把它找出来并打印怎么办?例如下面就找个123这个并打印,例如下面代码
package com.itheima;

import java.util.HashSet;
import java.util.Set;

public class Jihe {

        
        public static void main(String[] args) {
               
                Set<String>t = new HashSet<String>();
               
                t.add("abc");
                t.add("123");
                t.add("heima");
                t.add("a12d");
        }

}
我的这个又错在哪里呢?怎么改正?
package com.itheima;
import java.util.HashSet;
import java.util.Set;

public class Jihe {

        
        public static void main(String[] args) {
               
                Set<String>t = new HashSet<String>();
               
                t.add("abc");
                t.add("123");
                t.add("heima");
                t.add("a12d");
               
                for(String str: t){
                        //char []a = str.toCharArray();
                        
                        for(int i = 0;i<str.length(); i++){
                                if(str.charAt(i)<0||str.charAt(i)>9) break;
                                System.out.println(str);
                        }
                                
                }
                        
               
        }

}





评分

参与人数 1技术分 +1 收起 理由
田磊阳 + 1

查看全部评分

7 个回复

倒序浏览
str.replaceAll("\\d+","")==""  sysout(str)搞定
回复 使用道具 举报
  1. package it.harbor.dom4j;

  2. import java.util.HashSet;
  3. import java.util.Set;

  4. public class Demo {
  5.         public static void main(String[] args) {
  6.                 Set<String> t = new HashSet<String>();

  7.                 t.add("abc");
  8.                 t.add("123");
  9.                 t.add("heima");
  10.                 t.add("a12d");
  11.                 // 转化为字符串数组,将该 set 转储到一个新分配的 String 数组:
  12.                 String[] str = t.toArray(new String[0]);
  13.                 //遍历数组
  14.                 for (String string : str) {
  15.                         System.out.println(string);
  16.                 }
  17.                 int temp = 0;
  18.                 for (int i = 0; i < str.length; i++) {
  19.                         try {
  20.                                 temp = Integer.valueOf(str[i]);//判断能否转换成数字
  21.                                 System.out.println(temp);
  22.                         } catch (Exception e) {
  23.                                 System.out.println("Can not be changed to number!");
  24.                         }

  25.                 }
  26.         }
  27. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
田磊阳 + 1

查看全部评分

回复 使用道具 举报
字符串匹配数字,最好的方法就是用正则表达式
代码如下
  1. package cn.qiu.day5;

  2. /**
  3. * 需求:假设有一个集合,里面装的是字符串,但有的字符串是纯数字,我想把它找出来并打印怎么办?例如下面就找个123这个并打印
  4. */
  5. import java.util.HashSet;
  6. import java.util.Set;

  7. public class Jihe {
  8.     public static void main(String[] args) {
  9.         Set<String>t = new HashSet<String>();        
  10.         t.add("abc");
  11.         t.add("123");
  12.         t.add("heima");
  13.         t.add("a12d");
  14.         String regex="[\\d]+";//设定匹配规则
  15.         for(String str:t){//增强for循环
  16.                 if(str.matches(regex)){//如果和规则匹配就是数字,否者不是
  17.                  System.out.println(str);
  18.                 }else{
  19.                         System.out.println(str+"不是纯数字");
  20.                 }
  21.                
  22.         }
  23.     }
  24. }
复制代码
——

评分

参与人数 1技术分 +1 收起 理由
田磊阳 + 1

查看全部评分

回复 使用道具 举报
楼主的代码有点逻辑问题:
for(int i = 0;i<str.length(); i++){
       if(str.charAt(i)<0||str.charAt(i)>9) break;
       System.out.println(str);   //这样的话"1aaa"也会被打印吧
}
所以应该改成:
for(String str: t){
      boolean flag = true;  //表示符合要求

      for(int i = 0;i<str.length(); i++){
          if(str.charAt(i)<0||str.charAt(i)>9) { flag = false; break; }         
      }
      if(flag) system.out.println(str);
}

评分

参与人数 1技术分 +1 收起 理由
田磊阳 + 1

查看全部评分

回复 使用道具 举报
LZ程序有个逻辑问题,如果为数字字串,那么会打印3个123,因为你的打印语句是在for循环内的,所以正如LS所说明的,需要加个标志。还有个小问题,字符比较范围为‘0’-‘9’,不是0-9,字符比较是比较ASII码,‘0’--48。数字代表字符的ASII码哟!
import java.util.HashSet;
import java.util.Set;
public class Main {
                public static void main(String[] args) {
                        Set<String>t = new HashSet<String>();
                        boolean flg=false;
                        t.add("abc");
                        t.add("123");
                        t.add("heima");
                        t.add("1212");
                        
                        for(String str: t){
                            boolean flag = true;  //表示符合要求

                            for(int i = 0;i<str.length(); i++){
                                if(str.charAt(i)<'0'||str.charAt(i)>'9')
                                { flag = false;
                                  break;
                                }         
                            }
                            if(flag)
                            System.out.println(str);
                      }      
                }

        }

评分

参与人数 1技术分 +1 收起 理由
田磊阳 + 1

查看全部评分

回复 使用道具 举报
Set是一个集合类。集合类中数据的打印效果基本都是迭代。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马