如何把String类型转化成Integer类型?

哈,聊起Java中的类型转换,这事儿在我这十年里是家常便饭。
咱们来聊聊这些转换方法,都是些老江湖了。

首先,Integer转int,这事儿简单。
比如我以前写代码的时候,经常这样干:
java Integer i = new Integer(1 0); int k = i.intValue();
直接调用intValue()方法就搞定了。
现在想想,当时也没想明白为什么叫intValue(),可能有点偏激,但就这么用习惯了。

然后,int转Integer,这个也很常见:
java int i = 1 0; Integer it = new Integer(i);
这个转换看起来很直观,不过要注意的是,这种做法容易引发NumberFormatException,因为int的值范围比Integer小。

再来是String转int,这个方法就更多了。
比如我之前遇到过这样的情况:
java String str = "1 0"; Integer it = new Integer(str); int i = it.intValue();
或者直接这样:
java int i = Integer.parseInt(str);
这两种方法都是可以用的,但parseInt()会更直接一些。

反过来,int转String,我一般用String.valueOf():
java int i = 1 0; String s = String.valueOf(i);
或者这样:
java String s = Integer.toString(i);
这两种方法都可以,不过valueOf()更通用一些。

String转Integer,这个我也常用:
java String str = "1 0"; Integer it = Integer.valueOf(str);
这个方法比之前的方法要安全,因为它会检查String是否为空或者包含非法字符。

最后,Integer转String,这个也简单:
java Integer it = new Integer(1 0); String str = it.toString();
这个方法直接调用toString()就OK了。

至于String转BigDecimal,这个我在处理财务数据的时候用得比较多:
java BigDecimal bd = new BigDecimal(str);
这个转换没什么特别的,主要是BigDecimal在处理大数或者精确小数时非常方便。

日期相关的转换,比如从Calendar获取年月日,然后转换成日期字符串,我以前也是这么干的:
java Calendar calendar = Calendar.getInstance(); int year = calendar.get(Calendar.YEAR); int month = calendar.get(Calendar.MONTH) + 1 ; int day = calendar.get(Calendar.DATE);
String today = DateFormat.getDateInstance().format(new Date());
或者直接这样:
java Date date = new Date(); String today = new SimpleDateFormat("yyyy-MM-dd").format(date);
还有用java.sql.Date来转换的:
java Date date = new Date(); java.sql.Date sqlDate = new java.sql.Date(date.getTime());
这些方法都是Java中常见的类型转换,各有各的用途,我平时都是根据具体需求来选用的。
这块我没亲自跑过,数据我记得是X左右,但建议你核实一下具体的使用场景和性能要求。

postgresql:字符串字段转换为数值类型

我记得有一次,在处理一个遗留的系统数据库时,遇到了一个让人头疼的问题。
有个orders表,里面的discount_rate字段原本是字符串类型,存储着各种折扣率的百分比,比如"2 0%"、"3 0.5 %"等等。
因为系统升级,需要对这个字段进行数值化处理,以便进行后续的计算。

我一开始直接用了ALTER COLUMN命令,想直接转换成整数类型,结果失败了。
提示说无效的整数类型输入,原来是那些百分比字符串无法直接转换成整数。
那时候我突然想到,如果每个空值或者空字符串都直接转换成0,不就能解决这个问题了吗?
于是,我试着用CASE WHEN语句来处理这个问题。
我写了一个类似的SQL语句,对discount_rate字段进行了修改,设置了默认值为0,并且处理了空值和空字符串的情况。
修改后的SQL语句如下:
sql ALTER TABLE orders ALTER COLUMN discount_rate TYPE integer USING (CASE WHEN discount_rate IS NULL OR CHAR_LENGTH(TRIM(discount_rate)) = 0 THEN 0 ELSE CAST(discount_rate AS integer) END), ALTER COLUMN discount_rate SET DEFAULT 0;
这个操作成功了,所有的空值和空字符串都被转换成了0,而其他有效的百分比字符串也被正确地转换成了整数。
这让我意识到,在处理数据转换时,考虑特殊情况和处理边界条件是多么重要。

等等,还有个事,我突然想到,如果以后再遇到类似的问题,是不是可以写一个通用的函数来处理这种类型转换呢?这样不就能节省很多时间了吗?