在给定的输入字符串中打印整数

时间:2018-08-13 19:14:25

标签: java regex

我为以下代码获得了正确的输出。还有其他方法可以解决问题吗?

例如输入:海88您好输出: 88

    package stringint;
    import java.util.Scanner;
    public class StringInt 
    {
        public static void main(String[] args) 
        {
            Scanner scan = new Scanner(System.in);
            String name = scan.nextLine();
            name = name.replaceAll("[a-zA-Z]","@"); //replacing the 
                                                   //alphabets to "@"
            String[] array = name.split(" "); 
            for(int i = 0;i<array.length;i++)
            {
                if(!array[i].contains("@")) 
                {
                    System.out.println(array[i]);
                }
            }
        }
    }

3 个答案:

答案 0 :(得分:1)

尝试一下,我什么都没替换

package stringint;
import java.util.Scanner;
public class StringInt 
{
    public static void main(String[] args) 
    {
        Scanner scan = new Scanner(System.in);
        String name = scan.nextLine();
        name = name.replaceAll("[\\D+]",""); //replacing all non-numeric char with nothing.
        System.out.println(name);
    }
}

我要做的就是用空字符串替换字母,然后将结果替换为变量name而不是looping

这是上述code的有效示例。

答案 1 :(得分:0)

如果您输入的字符串类似于“ abc 12 @&!ab bb 54 n 2”,我将看不到正确的输出

在这种情况下,您还将获得除字母以外的所有其他多余字符。 尝试下面给出的此代码。希望对您有所帮助。

public static void main(String[] args) 
{     

        String nam = "abc 12 @ &! ab bb 54 n 2";
        Pattern p1=Pattern.compile("\\d");
        Matcher m1= p1.matcher(nam);
        List<String>listOfNumbr= new ArrayList<>();
        boolean chck=true;
        int start=0;
        int end=0;
        do{
            if(chck==true){
                chck=false;
                if(m1.find()){
                    start=m1.start();
                    String sub=nam.substring(start);
                     Pattern p2=Pattern.compile("\\D");
                      Matcher m2= p2.matcher(sub);
                      if(m2.find()){
                          end=m2.start();
                      }else{
                          end=sub.length();
                      }
                    String numbr=sub.substring(0,end);
                    listOfNumbr.add(numbr);
                    nam=sub.substring(end);
                    m1=p1.matcher(nam);
                }
            }else{

                start=m1.start();
                String sub=nam.substring(start);
                 Pattern p2=Pattern.compile("\\D");
                  Matcher m2= p2.matcher(sub);
                  if(m2.find()){
                      end=m2.start();
                  }else{
                      end=sub.length();
                  }
                String numbr=sub.substring(0,end);
                listOfNumbr.add(numbr);
                nam=sub.substring(end);
                m1=p1.matcher(nam);
            }
        }    while(m1.find());


    for(String str:listOfNumbr){
        System.out.println(str);
    }

这将给出字符串中的所有数字值。

答案 2 :(得分:0)

我认为这样做更容易:

String name = "Hai 88 Hello";
String[] digits = name.split("\\D+");
List<Integer> nums = Arrays.stream(digits).filter(s -> !s.isEmpty()).map(Integer::valueOf).collect(Collectors.toList());
System.out.println(nums); //[88]