当字符串包含';e';JAVA

当字符串包含';e';JAVA,java,bigdecimal,Java,Bigdecimal,注意:当我还是java编程新手时,我问过这个问题。我已经得到了同样的解决方案;那时候它自己。编辑以使其他读者明白 输入格式:输入为字符串格式。在我们的例子中,我们假设将只包含数字的字符串转换为BigDecimal,其余的可以忽略 例如:我们希望1e4->BigDecimal值被传递为“10000”。那么,输入 包含字母或任何其他特殊字符,可以忽略以进行转换 要求的原因:我们需要根据搜索文本搜索数据库中的几个列,并根据匹配条件检索行。比如列名称(VarChar列)、价格(十进制列)、类型(VarC

注意:当我还是java编程新手时,我问过这个问题。我已经得到了同样的解决方案;那时候它自己。编辑以使其他读者明白

输入格式:输入为字符串格式。在我们的例子中,我们假设将只包含数字的字符串转换为BigDecimal,其余的可以忽略

例如:我们希望1e4->BigDecimal值被传递为“10000”。那么,输入 包含字母或任何其他特殊字符,可以忽略以进行转换

要求的原因:我们需要根据搜索文本搜索数据库中的几个列,并根据匹配条件检索行。比如列名称(VarChar列)、价格(十进制列)、类型(VarChar列)。因此,如果搜索文本可以转换为BigDecimal,我们将搜索文本是否匹配任何列;如果无法转换为BigDecimal,我们将搜索文本是否匹配其他两列


没有进一步分析输入,我盲目地将搜索文本转换为BigDecimal

示例:如果DB中的名称为1e3,价格为10000,如果搜索文本为1e4,则转换后的1e4的BigDecimal值将匹配到10000,并获取该行

转换为BigDecimal的初始代码:

   BigDecimal textToBigDecimal = null;
    try
    {
       textToBigDecimal = new BigDecimal(searchText);
    }
    catch (NumberFormatException ignored)
    {
    }
    if (textToBigDecimal == null)
    {
      //criteria handling code.
    }
    else
    {
      //criteria handling code.
    }
跳过了构造代码的条件。添加了try-catch,因为输入也可以是纯字符串。根据这一标准,结构有所不同

修改代码:

 BigDecimal textToBigDecimal = null;
    try
    {
      if (!searchText.contains("e") && !searchText.contains("E"))
      {
         textToBigDecimal = new BigDecimal(searchText);
      }
    }
    catch (NumberFormatException ignored)
    {
    }
    if (textToBigDecimal == null)
    {
      //criteria handling code.
    }
    else
    {
      //criteria handling code.
    }

注意:如果还有任何疑问,请对问题进行评论。我发布了这个问题,希望找到一个默认的java方法,只将只包含数字的字符串转换为BigDecimal,并对其余字符串抛出异常。

如果您希望对像
'45e57'
这样的字符串抛出异常,您可以使用例如
Long.parseLong(“43e57”)
在构造
BigDecimal
之前。它会抛出
NumberFormatException

我不明白,是什么问题?你能分享你的代码和你得到的所有异常的完整堆栈跟踪吗?不清楚你在问什么——特别是“但是我不会抛出异常”你的意思是你想抛出异常,还是你不想抛出异常?A将使您更容易获得帮助。
新的BigDecimal(“45e57”)
将转换为
4.5E+58
,这是正确的!你想预防什么?要实现什么?我不想将45e57转换为4.5E+58。相反,抛出错误。@Finnismissing这背后的逻辑是什么?我的意思是,如果发现与number和point不同的内容,则应引发异常?如果您只需检查给定字符串中是否存在
e
,为什么要尝试捕获?我们不知道这些字符串值是否包含除
e
之外的其他内容。但问题需要更详细的描述:我们有什么样的字符串值etcTrue,但对于其他所有内容,
BigDecimal
本身会引发异常。
long
BigDecimal
之间唯一的区别是
long
不接受
E
,而
BigDecimal
接受,因此在这种情况下,检查
E
就可以了。有些值可能是十进制值。所以,我不能使用Long。正如@backslax所说,您可以简单地使用来检查字符串值