注意:当我还是Java编程新手时,我就问过这个问题。我有同样的解决方案;当时本身。编辑以使其他读者清楚。
输入格式:输入为字符串格式。在我们的例子中,我们假设将仅包含数字的字符串转换为 BigDecimal,其余的可以忽略。
例如:我们期望1e4 -> BigDecimal 值作为"10000"传递。因此,输入 包含字母或任何其他特殊字符可以忽略进行转换。
需求原因:我们需要根据搜索文本搜索数据库中的几列,并根据匹配条件检索行。假设列名称(VarChar列),价格(十进制列),类型(VarChar列)。因此,如果搜索文本可以转换为 BigDecimal 我们将搜索文本是否与其他任何列匹配,如果无法转换为 BigDecimal 我们将搜索文本是否与其他两列匹配。
在没有进一步分析输入的情况下,我盲目地将搜索文本转换为 BigDecimal。
示例:如果数据库中的名称为 1e3,价格为 10000,如果搜索文本为 1e4,则转换后的 BigDecimal 值 1e4 将与 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'
这样的字符串抛出异常,你可以在构造BigDecimal
之前使用例如Long.parseLong("43e57")
。它会抛出NumberFormatException