如何在JAVA中检查输入是整数还是字符串等?

时间:2014-09-13 04:41:38

标签: java

我想知道如何检查用户的输入是否是某种原始类型(我的意思是整数,字符串等......我认为它被称为原始类型?)。我希望用户输入内容,然后检查它是否是字符串,并相应地执行某个操作。 (JAVA) 我见过这样的代码:

if (input == (String)input) { (RANDOM STUFF HERE) }

或类似

if input.equals((String) input)

他们不工作。我想知道我怎么能只检查字符串?(已编辑) 我想知道是否有功能可以做到这一点?谢谢你的回答

编辑:在每个人的帮助下,我创建了我想要的固定代码:

package files;
import java.util.*;
public class CheckforSomething {
static Scanner inputofUser = new Scanner(System.in);    
static Object userInput;
static Object classofInput;
public static void main(String[] args){
    try{
    System.out.print("Enter an integer, only an integer: ");
    userInput = inputofUser.nextInt();

    classofInput = userInput.getClass();
    System.out.println(classofInput);
    } catch(InputMismatchException e) {
        System.out.println("Not an integer, crashing down");

    }

 }



 }

不再需要答案了,谢谢!

8 个答案:

答案 0 :(得分:3)

您可以尝试使用Regex:

String input = "34";
if(input.matches("^\\d+(\\.\\d+)?")) {
  //okay
} else {
  // not okay !
}

在这里,

^\\d+表示输入以数字0-9开头,

()?可能/或可能不会发生

\\.允许输入中的一个句号

答案 1 :(得分:1)

使用 instanceof 根据您的类型检查类型和类型转换:

 public class A {

    public static void main(String[]s){

        show(5);
        show("hello");
    }
    public static void show(Object obj){
        if(obj instanceof Integer){
            System.out.println((Integer)obj);
        }else if(obj instanceof String){
            System.out.println((String)obj);
        }
    }
}

答案 2 :(得分:0)

class Main{
    public static void main(String args[]){
        String str;
        Scanner sc=new Scanner(System.in);
        int n,
        boolean flag=false;
        while(!flag){
            try{
                str=sc.nextLine();
                n=Integer.parseInt(str);
                flag=true;
            }
            catch(NumberFormatException e){
                System.out.println("enter an no");
                str=sc.nextLine();
            }
        }
    }
}

答案 3 :(得分:0)

Scanner input = new Scanner (System.in);

if (input.hasNextInt()) System.out.println("This input is of type Integer.");
else if (input.hasNextFloat()) System.out.println("This input is of type Float.");
else if (input.hasNextLine()) System.out.println("This input is of type string."); 
else if (input.hasNextDouble()) System.out.println("This input is of type Double."); 
else if (input.hasNextBoolean()) System.out.println("This input is of type Boolean.");  

  else if (input.hasNextLong())
    System.out.println("This input is of type Long."); 

答案 4 :(得分:0)

讨厌6年后提出这个建议,但我找到了另一种可能的解决方案。

目前正在参加编码训练营,不得不解决类似的问题。我们引入布尔值,并根据try / catch块的结果更改其值。然后,我们使用简单的if语句检查布尔值。您可以省略打印件,而输入代码。外观如下:

import java.io.IOException;
import java.util.Scanner;

public class DataTypeFinder {
    public static void main(String[] args) throws IOException {
        Scanner scan = new Scanner(System.in);
        String input = "";

        while (true) { //so we can check multiple inputs (optional)
            input = scan.nextLine();

            if ("END".equals(input)) { //a way to exit the loop
                break;
            }

            boolean isInt = true; //introduce boolean to check if input is of type Integer
            try { // surround with try/catch
                int integer = Integer.parseInt(input); //boolean is still true if it works
            } catch (NumberFormatException e) {
                isInt = false; //changed to false if it doesn't
            }

            boolean isDouble = true; //same story
            try {
                double dbl = Double.parseDouble(input);
            } catch (NumberFormatException e) {
                isDouble = false;
            }

            if (isInt) {
                System.out.printf("%s is integer type%n", input);
            } else if (isDouble) {
                System.out.printf("%s is floating point type%n", input);
            } else if (input.length() == 1) { //this could be useless depending on your case
                System.out.printf("%s is character type%n", input);
            } else if ("true".equals(input.toLowerCase()) || "false".equals(input.toLowerCase())) {
                System.out.printf("%s is boolean type%n", input);
            } else {
                System.out.printf("%s is string type%n", input);
            }
        }
    }
}

答案 5 :(得分:-1)

尝试使用Integer而不是int的instanceof函数。每个基元也有一个类

答案 6 :(得分:-1)

这可以吗?

class Test
{
    public static void main(String args[])
    {
        java.util.Scanner in = new java.util.Scanner(System.in);
        String x = in.nextLine();
        System.out.println("\n The type of the variable is : "+x.getClass());
    }
}

输出:

subham@subham-SVE15125CNB:~/Desktop$ javac Test.java 
subham@subham-SVE15125CNB:~/Desktop$ java Test
hello

 The type of the variable is : java.lang.String

答案 7 :(得分:-1)

但Zechariax希望使用try catch

得到答案

您可以使用NumberForamtter和ParsePosition实现此目的。 看看这个解决方案

import java.text.NumberFormat;
import java.text.ParsePosition;


    public class TypeChecker {
        public static void main(String[] args) {
        String temp = "a"; // "1"
        NumberFormat numberFormatter = NumberFormat.getInstance();
        ParsePosition parsePosition = new ParsePosition(0);
        numberFormatter.parse(temp, parsePosition);
        if(temp.length() == parsePosition.getIndex()) {
            System.out.println("It is a number");
        } else {
            System.out.println("It is a not number");
        }
    }
}