【java】含有小数点的数值字符串进行切割判别数值部分

版权声明:可以转载奥 https://blog.csdn.net/Jiajikang_jjk/article/details/83247625

含有小数点的数值字符串进行切割判别数值部分

前言

        博主遇到一个业务需求,就是一个参考寿命的属性必须使用INT型,而客户给的excel表中的参考寿命的数据一列是以年,万小时,小时 ,如下图所示:

在这里插入图片描述
所以就要对此进行一个处理

思路

  • 分类
            年,万小时,小时 三种情况
  • 判别
            进行判断此字符串是否包含有年,万小时,小时 三种情况.
  • 截取字符串
            截取字符串获取数值部分
  • 判断是否是数字(包含小数点)
            使用正则表达式判断是否函数小数点
  • String型转int型
            对数值部分(可能含有小数点)做四舍五入或者取整之后String型转int型操作
  • 单位换算
            最后以小时为单位进行换算处理

流程图分析

在这里插入图片描述

代码展示

package ceshi;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class test_String_fenge {
	public static void main(String[] args) {

		String a = "123万小时";
		String b = "45.6小时";
		String c = "789年";

		String str1 = a.substring(0, a.indexOf("万小时"));
		String str2 = b.substring(0, b.indexOf("小时"));
		String str3 = c.substring(0, c.indexOf("年"));

		System.out.println("\nstr1:" + str1);
		System.out.println("\nstr2:" + str2);
		System.out.println("\nstr3:" + str3);

		String s = "789年";

		if (s.contains("万小时")) {
			System.out.println("\n包含万小时");

			String str22 = s.substring(0, s.indexOf("万小时"));// 获取数字部分
			System.out.println("获取数值部分str22:" + str22);

			// 使用正则表达式的方式判断是否为数字,包括整数和小数
			Pattern pattern1 = Pattern.compile("-?[0-9]+.?[0-9]+");
			Matcher isNum1 = pattern1.matcher(str22);
			if (!isNum1.matches()) {
				System.out.println("不是数字");
				// 这里要抛出一个异常提示不是数值
				// 或者统计不是数值的行数
			} else {
				System.out.println("是数字");

				// 是数字-------继续判断是否带有小数点
				Pattern pattern2 = Pattern.compile("^\\d+$|-\\d+$");// 判断是否为整数
				Matcher isNum2 = pattern2.matcher(str22);
				if (!isNum2.matches()) {
					System.out.println("不是整数");
					// 四舍五入取整数
					float f = Float.parseFloat(str22);
					// 然后四舍五入到整形,只考虑正数了,根据实际需求这里不考虑负数
					int number = (int) (f + 0.5) * 10000;// 加0.5就是为了四舍五入,因为强转int会舍弃小数点后边的部分
					System.out.println("\n四舍五入取整Int型:" + number);

				} else {
					System.out.println("是整数");
					// 将String型转化为int型
					int ii = Integer.parseInt(str22) * 10000; // 万小时转化为小时
					System.out.println("\n是整数且为:" + ii);
				}

			}

		} else if (s.contains("小时")) {
			System.out.println("\n包含小时");
			String str22 = s.substring(0, s.indexOf("小时"));// 获取数字部分
			System.out.println("获取数值部分str22:" + str22);

			// 使用正则表达式的方式判断是否为数字,包括整数和小数
			Pattern pattern1 = Pattern.compile("-?[0-9]+.?[0-9]+");
			Matcher isNum1 = pattern1.matcher(str22);
			if (!isNum1.matches()) {
				System.out.println("不是数字");
				// 这里要抛出一个异常提示不是数值
				// 或者统计不是数值的行数
			} else {
				System.out.println("是数字");

				// 是数字-------继续判断是否带有小数点
				Pattern pattern2 = Pattern.compile("^\\d+$|-\\d+$");// 判断是否为整数
				Matcher isNum2 = pattern2.matcher(str22);
				if (!isNum2.matches()) {
					System.out.println("不是整数");
					// 四舍五入取整数
					float f = Float.parseFloat(str22);
					// 然后四舍五入到整形,只考虑正数了,根据实际需求这里不考虑负数
					int number = (int) (f + 0.5);// 加0.5就是为了四舍五入,因为强转int会舍弃小数点后边的部分
					System.out.println("\n四舍五入取整Int型:" + number);

				} else {
					System.out.println("是整数");
					// 将String型转化为int型
					int ii = Integer.parseInt(str22);
					System.out.println("\n是整数且为:" + ii);
				}

			}

		} else if (s.contains("年")) {
			System.out.println("\n包含年");

			String str22 = s.substring(0, s.indexOf("年"));// 获取数字部分
			System.out.println("获取数值部分str22:" + str22);

			// 使用正则表达式的方式判断是否为数字,包括整数和小数
			Pattern pattern1 = Pattern.compile("-?[0-9]+.?[0-9]+");
			Matcher isNum1 = pattern1.matcher(str22);
			if (!isNum1.matches()) {
				System.out.println("不是数字");
				// 这里要抛出一个异常提示不是数值
				// 或者统计不是数值的行数
			} else {
				System.out.println("是数字");

				// 是数字-------继续判断是否带有小数点
				Pattern pattern2 = Pattern.compile("^\\d+$|-\\d+$");// 判断是否为整数
				Matcher isNum2 = pattern2.matcher(str22);
				if (!isNum2.matches()) {
					System.out.println("不是整数");
					// 四舍五入取整数
					float f = Float.parseFloat(str22);
					// 然后四舍五入到整形,只考虑正数了,根据实际需求这里不考虑负数
					int number = (int) (f + 0.5) * 365 * 24;// 加0.5就是为了四舍五入,因为强转int会舍弃小数点后边的部分
					System.out.println("\n四舍五入取整Int型:" + number);

				} else {
					System.out.println("是整数");
					// 将String型转化为int型
					int ii = Integer.parseInt(str22) * 365 * 24;
					System.out.println("\n是整数且为:" + ii);
				}
			}
		} else {
			System.out.println("\n都不包含,即为非法数据");
		}
	}
}

结果

在这里插入图片描述

说明

        根据博主实际的业务需求,这里没有进行负数的判别。

猜你喜欢

转载自blog.csdn.net/Jiajikang_jjk/article/details/83247625