关于字符串转数字脚本小白没想到的那件事!
前言
最近处理了一个HTTP请求里的序列号参数,伙伴建议去数据库里取最新的值,+1处理后再赋值给新的请求,没成想,一个我惯常用的Integer.parseInt()却遭遇重重地滑铁卢,加班搞了近三个小时都没成……脚本小白的惨淡人生……为了这一个耗时超过大半天的问题,这一篇博客可说是必不可少了!~
踩坑之 Integer.parseInt()在处理字符串转数字时,可不是万能的,还有大数值的问题
1、上配置
(1)用户定义的变量 - 今日来练兵的两个字符串变量

(2)线程组 - 默认配置就好喽

(3)JSR223取样器 - 同一个办法处理看起来没什么区别的字符串!

(4)Java请求 - 打印处理过的变量值


(5)永远不能忘记的【查看结果树】与【调试取样器】 - 见前图就好咯~


2、看运行情况
报错了,神奇吧,而且。。。说的好像是"5001"这个字符串在做数字处理的时候报错了

3、分析请教
我不安地带着这个略显奇特的问题去请教Deep Seek,一个我明明几天前还成功处理的Integer.parseInt()怎么就不好使了呢。。。原脚本中strB是我从一个JDBC请求中获取并通过JSR223组件中的处理的,Deep Seek给了超长回复,怀疑所获取的strB/str2 中除了看得见的 5001,还有其他看不见的东西在作怪。。。
4、调试解决
加班三个多小时,一个看起来明明是那么简单、容易的问题……烦躁、愤懑……下午还诗情画意地跟朋友谈哲学、欣赏文艺呢……这会子就只有自我怀疑……回去比较晚了,一路上我觉察到自己里面正缓缓升起的一股怨怼情绪,白天我为自己和猫同志写了「待办事项」,期望两人一起加油,回去发现他只挑拣了一两样打折扣地执行了、我发信息给猫同志也没有任何回应……进门之后,猫同志也没有像往常一样在楼下笑盈盈地等我,而只是帮我把睡前的东西摆弄好,在楼上听到我的声音也没有一点招呼,高冷的猫,我想到心理学上的「踢猫效应」,而那个时刻,情绪涨满的我确实只想「踢猫」……尽管我心中有另一个耐心的小人已经冷静沉稳地嘱咐过我: 「烦、累,可都不是在致良知哦」,「解决问题总会遇到阻碍,调整心态、耐心突破才是正解」,「今天不行,按下班前的方案,明早再试一下嘛,再不行还可以请教同事里的高手」……我还是没忍住,对着无辜的大猫一顿捶打、发牢骚……猫同志一点不买账:“你不是学计算机的吗?这种字符类的问题不是第一天就学了吗”,“你给我发那些待办干吗?不专心工作?”,“拍商品照片,你自己下班回来不能拍吗”……我索然无味地走开去收拾洗漱了,带着颓败的心绪,我想到先生说的修身之道「喜怒哀乐发乎中节」、又想到那「修身齐家治国平天下」的话,自己的修行似乎还在离原点不远的位置……
第二天早上我又早早起来了,希望争取早出门,虽然还是没提早多少、但没有迟到。到公司运动一会儿后开工,我开始耐性地又搞起昨天的问题,试了Deep Seek给的检查方案,无效;然后我开始跟同事描述起我的问题……说着说着……我竟想到自己可能忽略了的一个重要情况,那就是自己要处理字符串长度是不是太长了……赶紧按长字符串的规格更换处理函数,竟然……通了……全通了……一瞬间,情绪释然了,原来,也许,所有事情都是这样,不禁琢磨,有志者,事竟成……
(1) 调试脚本
根据分析结果,修改脚本,并执行

继续报错!看这个情况,是str1 的值除了5001,还包含了一对""。。。变量定义里加的" 在这里被当成字符串的内容了。。。


赶紧改。。。。

执行,继续报错。。。。才发现,最初的代码在处理strB时,replace()内容写错了。。。


毛躁是个致命伤啊,,,,,今天跑性能脚本就犯了同样的毛病,虚拟用户总数20,给忘了配置,直接成了2。。。。而且JAVA请求里,本来要打印num2的也变成打印num1了……


改了再跑!终于通了!!!为了验证num1 和 num2确实成功被转成了数字,把两个家伙加和打印num3试试!



再执行——大成了——

总结
JAVA中,Integer和Long是基本数据类型int和long的包装类。它们表示的范围如下:
-
Integer类型(对应
int原始类型):
占用32位(4字节),取值范围为 -2,147,483,648 到 2,147,483,647(即从 (-2^{31}) 到 (2^{31}-1))。 -
Long类型(对应
long原始类型):
占用64位(8字节),取值范围为 -9,223,372,036,854,775,808 到 9,223,372,036,854,775,807(即从 (-2^{63}) 到 (2^{63}-1))。
补充说明
- 在Java中,
Integer和Long作为包装类,提供了常量如Integer.MAX_VALUE、Long.MIN_VALUE等来直接获取范围边界。 - 如果需要处理超出
Integer范围的大数值(如大型ID或时间戳),应优先使用Long类型。 - 对于
Long类型的字面量,需在数字后添加后缀L或l(例如123456789012345L)。
有了上述前提,那么在进行String转Integer类型数据时,就要注意String类型变量值的长度……不能全部用Integer.parseInt() 或 str.toInteger(),对于字符串变量值特别长的,比如"202500000000038",就需要用str.toLong()才能实现类型转换!
下期预告
下一篇博客,不知道我或许应该简单记述一下卡了我三四天的一个接口脚本调试……
posted on 2025-12-08 08:56 Shannon_Zhang 阅读(9) 评论(0) 收藏 举报
浙公网安备 33010602011771号