如何检查传入字符串在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的前提,认为这是现成的?