如何检查传入字符串在java中属于哪种类型?

如何检查传入字符串在java中属于哪种类型?,java,string,Java,String,我想检查传入字符串的类型 大概是这样的: public void checkType(String str) { if(str is Integer){ //do Integer stuff } if(str is Float){ //do Float stuff } if(str is Boolean){ //do Boolean stuff } if(str is Double){

我想检查传入字符串的类型

大概是这样的:

public void checkType(String str)
{
    if(str is Integer){
        //do Integer stuff
    }
    if(str is Float){
        //do Float stuff
    }
    if(str is Boolean){
        //do Boolean stuff
    }
    if(str is Double){
        //do Double stuff
    }
}

更好的方法是什么?

对于您尝试执行的操作,最好将方法参数声明为对象类型而不是字符串,例如:

public void checkType(Object var) { 
    // ..... Your code .....
}
public void checkType(Object var) { 
    String varType = var.getClass().getSimpleName().toUpperCase();

    // ..... Your code .....
}
public void checkType(Object var) { 
    String varType = var.getClass().getSimpleName().toUpperCase();

    switch (varType) {
        case "STRING":
            // do String stuff
            break;
        case "INTEGER":
            // do int stuff
            break;
        case "FLOAT":
            // do float stuff
            break;
        case "DOUBLE":
            // do double stuff
            break;
        case "BOOLEAN";
            // do boolean stuff
            break;
        case "JLABEL":
            // do JLabel stuff 
            // (any object can be supplied)
            break;
    }
}
唯一的问题是,您需要知道为特定方法代码提供了什么对象类型。只需一行代码即可完成此操作,例如:

public void checkType(Object var) { 
    // ..... Your code .....
}
public void checkType(Object var) { 
    String varType = var.getClass().getSimpleName().toUpperCase();

    // ..... Your code .....
}
public void checkType(Object var) { 
    String varType = var.getClass().getSimpleName().toUpperCase();

    switch (varType) {
        case "STRING":
            // do String stuff
            break;
        case "INTEGER":
            // do int stuff
            break;
        case "FLOAT":
            // do float stuff
            break;
        case "DOUBLE":
            // do double stuff
            break;
        case "BOOLEAN";
            // do boolean stuff
            break;
        case "JLABEL":
            // do JLabel stuff 
            // (any object can be supplied)
            break;
    }
}
声明的名为varType的字符串变量将保存所提供对象的名称。现在,您可以使用if/then或switch()方法来确定实际提供的内容,例如:

public void checkType(Object var) { 
    // ..... Your code .....
}
public void checkType(Object var) { 
    String varType = var.getClass().getSimpleName().toUpperCase();

    // ..... Your code .....
}
public void checkType(Object var) { 
    String varType = var.getClass().getSimpleName().toUpperCase();

    switch (varType) {
        case "STRING":
            // do String stuff
            break;
        case "INTEGER":
            // do int stuff
            break;
        case "FLOAT":
            // do float stuff
            break;
        case "DOUBLE":
            // do double stuff
            break;
        case "BOOLEAN";
            // do boolean stuff
            break;
        case "JLABEL":
            // do JLabel stuff 
            // (any object can be supplied)
            break;
    }
}

我想这应该可以做到(错误捕获由您决定)。

最后我找到了解决方案。对于整数和浮点,我使用了Java正则表达式

像这样:

  • 对于整数:

    String intRegex = "[0-9]+";
    if (inputString.matches(intRegex)) {
        //do Integer stuff
    }
    
  • 对于浮动:

    String floatRegex = "^([+-]?\\d*\\.?\\d*)$"; 
    if (inputString.matches(floatRegex)) {
        //do Float stuff
    }
    
  • 我认为这也是识别字符串是整数还是浮点类型的好方法

    对于布尔型的东西,我还没有找到好的解决方案。所以我只是用了等于运算符


    谢谢…

    这里有一个逻辑问题,因为给定的输入“数字”可能可转换为
    整数
    浮点
    、或
    双精度
    。在这种情况下,你会选择哪一个?最好让调用者对特定类型使用特定的重载方法。这与面向对象无关。更好的方法是意识到你的问题没有你想检查什么“类型”那么有意义字符串中包含的不是您答案中的任意对象。@Tom-我的答案是基于OP在其帖子中的最后一句话:“做这件事的更好方法是什么?”@DevilsHnd-我使用SAX解析器读取xml文件,为此,我重写了startElement和endElement方法。这个方法参数是默认的字符串,那么我能做什么呢?@DevilsHnd,所以你完全改变了OPs的前提,认为这是现成的?