栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Java将List中的所有String类型的数字转化为Double类型

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java将List中的所有String类型的数字转化为Double类型

一. 问题背景

在我的项目中,Java基于Easyexcel读取到Excel的值全都是String类型的(没有使用数据结构类),尽管Excel中数字为数值类型,Easyexcel也会读取为String类型返回。当我想将读取到的数据另存为另一个Excel文件时,它写入Excel文件的数值依然是字符串形式的,这将导致我在Excel中没办法对数据进行数值相关函数的计算。

因此,我需要在程序中将所有String类型的数字转化为Double类型,同时原本就为字符串的类型保持不变。

下面我将以这个List为例,来模拟我读入的数据类型:

List> list = new ArrayList>();
Map map1 = new HashMap();
map1.put(0, "apple");
map1.put(1, "1");
map1.put(2, "2");
list.add(map1);
Map map2 = new HashMap();
map2.put(0, "banana");
map2.put(1, "6");
map2.put(2, "7");
list.add(map2);
System.out.println(list);

输出为:

[{0=apple, 1=1, 2=2}, {0=banana, 1=6, 2=7}]

我读入的Excel格式与上面这个格式类似,其中List中每一组Map代表Excel中每一行数据,Map中每一个元素代表每一个单元格的数据,例如上面这个格式的数据在Excel中为:


关于Java读取Excel数据的方法可以参考:【亲测可用】Java基于EasyExcel读取一维及二维Excel数据并存入数组

二. 判断字符串中是否为数字

这里用正则化的方法判断String类型的元素中是否为数字,使用方法如下:

String value = "123";
Pattern pattern = Pattern.compile("-?[0-9]+.?[0-9]*");
System.out.println(pattern.matcher(value).matches());

输出为:

true

当value = 数字时,pattern.matcher(value).matches()返回true;否则返回false。这里的数字包括整数、小数、正数和负数。

三. 循环判断List中数据类型并修改

遍历List和Map,判断Map中每个元素的数据,若为数字则修改数据类型:

Pattern pattern = Pattern.compile("-?[0-9]+.?[0-9]*");
for(int i=0;i
	Map map = list.get(i);
	for(int j=0;j
		String value = map.get(j).toString();
		if(pattern.matcher(value).matches())
		{
			map.put(j, Double.parseDouble(value));
		}
		else
		{
			map.put(j, value);
		}
	}
	list.set(i, map);
}
四. 完整代码
List> list = new ArrayList>();
Map map1 = new HashMap();
map1.put(0, "apple");
map1.put(1, "1");
map1.put(2, "2.090");
list.add(map1);
Map map2 = new HashMap();
map2.put(0, "banana");
map2.put(1, "6.8979");
map2.put(2, "7");
list.add(map2);
System.out.println("原始:"+list);
     
Pattern pattern = Pattern.compile("-?[0-9]+.?[0-9]*");
for(int i=0;i
	Map map = list.get(i);
	for(int j=0;j
		String value = map.get(j).toString();
		if(pattern.matcher(value).matches())
		{
      		map.put(j, Double.parseDouble(value));
      	}
      	else
      	{
      		map.put(j, value);
      	}
	}
	list.set(i, map);
}
System.out.println("处理后:"+list);

输出为:

原始:[{0=apple, 1=1, 2=2}, {0=banana, 1=6, 2=7}]
处理后:[{0=apple, 1=1.0, 2=2.0}, {0=banana, 1=6.0, 2=7.0}]
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1031192.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号