JAVA温度补0问题?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JAVA温度补0问题?相关的知识,希望对你有一定的参考价值。

直接举例
1.2 -> 01.2
-1.23 -> -1.23
-12.1 -> -12.1
-1.2 -> -01.2
11 -> 011

就是 只能有三位数字 不够的前面补0

你这个需求比较特殊,像1.2 -> 01.2,01.2已经不是正常的数字了(正常数字整数部分左侧不能有零),拿只能当字符串来处理了。代码如下:

public class Test

public static void main(String[] args)
handle("1.2");
handle("-1.23");
handle("-12.1");
handle("-1.2");
handle("11");


private static void handle(String temperature)
String[] temp = temperature.split("\\\\.");
if (temp.length == 1) //无小数点
//整数直接在前面补零
temp[0] = String.format("%03d", Integer.valueOf(temp[0]));
System.out.println(temperature + " -> " + temp[0]);
else if (temp.length == 2) //有小数点
if (temp[0].startsWith("-")) //是负数
temp[0] = temp[0].substring(1, temp[0].length());//先去掉负号
if (temp[0].length() + temp[1].length() < 3) //当整数部分长度和小数部分长度相加不足三位时,如1.2,则整数部分补(3-小数部分位数)个零
temp[0] = String.format("%0" + (3 - temp[1].length()) + "d", Integer.valueOf(temp[0]));

System.out.println(temperature + " -> " + "-" + temp[0] + "." + temp[1]);
else //是正数
if (temp[0].length() + temp[1].length() < 3) //当整数部分长度和小数部分长度相加不足三位时,如1.2,则整数部分补(3-小数部分位数)个零
temp[0] = String.format("%0" + (3 - temp[1].length()) + "d", Integer.valueOf(temp[0]));

System.out.println(temperature + " -> " + temp[0] + "." + temp[1]);



运行结果:

参考技术A import java.util.regex.*;

public class test
//不足三位数,前面补0
private static String addZero(String str)
int count = 0;
for (int i = 0; i < str.length(); i++)
if((int)str.substring(i, i+1).charAt(0)>=48&&(int)str.substring(i, i+1).charAt(0)<=57)
count++;


if (count==1)
str = "00" + str;
else if(count==2)
str = "0" + str;

return str;

//判断是否是整数
private static boolean isInteger(String str)
return Pattern.matches("^-?\\d+$",str);

//判断是否是小数
private static boolean isDouble(String str)
return Pattern.matches("^(-?\\d+)(\\.\\d+)?$",str);

//拼接输出的字符串
private static String outputString(String str)
int temp = 0;
double tempA = 0;
String strA = "";
if (isInteger(str)==true)
temp = Integer.parseInt(str);
if (temp >= 0)
strA = addZero(""+temp+"");
else if (temp < 0)
strA = "-"+addZero(""+Math.abs(temp)+"");

else if(isDouble(str)==true)
tempA = Double.parseDouble(str);
if (tempA >= 0)
strA = addZero(""+tempA+"");
else if (tempA < 0)
strA = "-"+addZero(""+Math.abs(tempA)+"");

else
strA="NaN"; //当既不是整数又不是小数的时候输出

return strA;

public static void main(String[] args)
String str = "";
str = "1.2";
System.out.println(str+" -> "+outputString(str));
str = "-1.23";
System.out.println(str+" -> "+outputString(str));
str = "12.1";
System.out.println(str+" -> "+outputString(str));
str = "-1.2";
System.out.println(str+" -> "+outputString(str));
str = "11";
System.out.println(str+" -> "+outputString(str));


注意:我给的是一个定值,你输入的时候注意,输入的是一个字符串,能自动识别是整数(包括0)和小数的
参考技术B [图片] 输入整数就没问题,但是保留两位的无效,输入带有小数点的气温就提示错误

java web开发 接口开发补坑2

    这里主要是接上篇java web开发(四) 接口开发补坑1文章的。如果你还未了解接口开发方面的文章,请先看这篇文章,  java web 开发 (二) 接口开发!今天这篇文章继续来细说,demo项目中的代码!

一、cn.xinxing.json 这个包中是处理有关json操作的。博文中留言有关响应状态码问题的小伙伴们,请仔细看这部分!

1.1 .cn.xinxing.json.core 这个包中定义了响应对象。下面具体看看这几个类。

1.1.1 AbstractJsonObject 这个类是所有响应对象的基类,定义了响应状态码、响应状态描述以及时间戳!

 

package cn.xinxing.json.core;

import java.util.Date;

import cn.xinxing.json.status.StatusObject;

/**
 * 响应基类
 */
public class AbstractJsonObject 

	private String code;//响应状态码
	// 
	private String msg;//响应状态描述

	private Long time = new Date().getTime();//时间戳

	public String getCode() 
		return code;
	

	public void setCode(String code) 
		this.code = code;
	

	/**
	 * @return the time
	 */
	public Long getTime() 
		return time;
	

	/**
	 * @param time
	 *            the time to set
	 */
	public void setTime(Long time) 
		this.time = time;
	

	public String getMsg() 
		return msg;
	

	public void setMsg(String msg) 
		this.msg = msg;
	

	public void setContent(String code, String msg) 
		this.code = code;
		this.msg = msg;
	

	public void setStatusObject(StatusObject statusObject) 
		this.code = statusObject.getCode();
		this.msg = statusObject.getMsg();
	

其中 code 是响应状态码,msg是响应状态描述,time 是时间戳。code之前也一直提到过,这里再次强调,code的值是项目中接口的运行状态!例如当接口运行运行成功,会设置code为‘ok’。具体code值是多少,这个要接口自己定义一个规范,当调用者拿到这个code时,就知道如何处理了!下面会给出这个项目中定义的code!

 

1.1.2 SingleObject ,这个对象中定了一个对象。主要是用来在返回单个对象时使用!

 

package cn.xinxing.json.core;

/**
 *单个对象
 */
public class SingleObject extends AbstractJsonObject 

	private Object object;//单个对象

	public Object getObject() 
		return object;
	

	public void setObject(Object object) 
		this.object = object;
	

当响应的内容是一个对象时,就定义这个SingleObject类,将对象设置给SingleObject类,然后返回SingleObject即可!

 

1.1.3  ListObject,这个对象中定了一个列表对象。是用来返回列表对象!

 

package cn.xinxing.json.core;

import java.util.List;

/**
 * 列表对象
 */
public class ListObject extends AbstractJsonObject 

	
	private List<?> items;// 列表对象

	public List<?> getItems() 
		return items;
	

	public void setItems(List<?> items) 
		this.items = items;
	

当响应的内容是一个列表时,我们就可以使用这个ListObject,将列表放置到items属性中,然后返回ListObject就可以了!

 

这里我只给出了以上这两种返回结果!当然还有其他的返回结果,例如分页形式的!这些规则都需要在项目开发时制定好,在开发时,才会顺利便捷!

1.2  cn.xinxing.json.responseUtils 这个包中是响应处理,有一个类ResponseUtils,看具体实现,

 

package cn.xinxing.json.responseUtils;

import java.io.IOException;

import javax.servlet.http.HttpServletResponse;

/**
 * 响应处理
 */
public class ResponseUtils 

	/**
	 * 返回json 串
	 * 
	 * @param response
	 * @param text
	 */
	public static void renderJson(HttpServletResponse response, String text) 
		// System.out.print(text);
		render(response, "text/plain;charset=UTF-8", text);
	

	/**
	 * 发送内容。使用UTF-8编码。
	 * 
	 * @param response
	 * @param contentType
	 * @param text
	 */
	public static void render(HttpServletResponse response, String contentType, String text) 
		response.setContentType(contentType);
		response.setCharacterEncoding("utf-8");
		response.setHeader("Pragma", "No-cache");
		response.setHeader("Cache-Control", "no-cache");
		response.setDateHeader("Expires", 0);
		try 
			response.getWriter().write(text);
		 catch (IOException e) 
		
	

将结果串设置到response中,返回给调用者!

 

1.3 cn.xinxing.json.status  这个包定义响应状态有关的。

1.3.1 StatusCode ,定义响应状态码

 

package cn.xinxing.json.status;

/**
 * 
 * 返回code
 */
public class StatusCode 

	public static String CODE_SUCCESS = "ok";//访问成功

	public static String CODE_ERROR = "0001"; //访问错误

	public static String CODE_ERROR_PARAMETER = "0002";//参数错误

	public static String CODE_ERROR_PROGRAM = "0003";//程序异常

	public static String CODE_ERROR_NO_LOGIN_OR_TIMEOUT = "0004";//未登录或登录超时,请重新登录

	public static String CODE_ERROR_EXIST_OPERATION = "0005";//已操作


这个类中定义了接口中使用到的所有响应状态码。具体的定义规则,都是开发者定义的!没有什么标准规范!

 

1.3.2 StatusHouse,将code和msg组装到一起,在使用时更加方便!

 

package cn.xinxing.json.status;

/**
 * 状态封装类
 * 将code和msg组合到一起,方便使用
 */
public class StatusHouse 
	public static StatusObject COMMON_STATUS_OK = new StatusObject(StatusCode.CODE_SUCCESS, "访问成功");
	public static StatusObject COMMON_STATUS_ERROR = new StatusObject(StatusCode.CODE_ERROR, "访问错误,错误码:(" + StatusCode.CODE_ERROR + ")");
	public static StatusObject COMMON_STATUS_NO_LOGIN_OR_TIMEOUT = new StatusObject(StatusCode.CODE_ERROR_NO_LOGIN_OR_TIMEOUT, "未登录或登录超时,请重新登录,错误码:(" + StatusCode.CODE_ERROR_NO_LOGIN_OR_TIMEOUT + ")");
	public static StatusObject COMMON_STATUS_ERROR_PROGRAM = new StatusObject(StatusCode.CODE_ERROR_PROGRAM, "程序异常,错误码:(" + StatusCode.CODE_ERROR_PROGRAM + ")");
	public static StatusObject COMMON_STATUS_ERROR_PARAMETER = new StatusObject(StatusCode.CODE_ERROR_PARAMETER, "参数错误,错误码:(" + StatusCode.CODE_ERROR_PARAMETER + ")");
	public static StatusObject COMMON_STATUS_EXIST_OPERATION = new StatusObject(StatusCode.CODE_ERROR_EXIST_OPERATION, "已操作,错误码:(" + StatusCode.CODE_ERROR_EXIST_OPERATION + ")");

1.3.3 StatusObject  定义了拥有code和msg属性的对象,在上面的StatusHouse类中使用到!

 

 

package cn.xinxing.json.status;

/**
 * 状态对象
 */
public class StatusObject 
	// 状态码
	private String code;

	// 状态信息
	private String msg;

	public StatusObject(String code, String msg) 
		super();
		this.code = code;
		this.msg = msg;
	

	public String getCode() 
		return code;
	

	public void setCode(String code) 
		this.code = code;
	

	public String getMsg() 
		return msg;
	

	public void setMsg(String msg) 
		this.msg = msg;
	


1.4 cn.xinxing.json.utils 这个包是有关json解析的,只有一个JackJsonUtils 类。

 

1.4.1 JackJsonUtils ,因为项目中使用的是jackjson来处理json。

 

package cn.xinxing.json.utils;

import com.fasterxml.jackson.databind.ObjectMapper;

/**
 * jackjson
 */
public class JackJsonUtils 
	static ObjectMapper objectMapper;
	/**
	 * 解析json
	 * 
	 * @param content
	 * @param valueType
	 * @return
	 */
	public static <T> T fromJson(String content, Class<T> valueType) 
		if (objectMapper == null) 
			objectMapper = new ObjectMapper();
		
		try 
			return objectMapper.readValue(content, valueType);
		 catch (Exception e) 
			e.printStackTrace();
		
		return null;
	

	/**
	 * 生成json
	 * 
	 * @param object
	 * @return
	 */
	public static String toJson(Object object) 
		if (objectMapper == null) 
			objectMapper = new ObjectMapper();
		
		try 
			return objectMapper.writeValueAsString(object);
		 catch (Exception e) 
			e.printStackTrace();
		
		return null;
	

这个类有两个方法,fromJson()和toJson(),他们分别是解析json和生成json字符串的!

 

好了,有关响应以及json这么多。有疑问的,请多看几遍!
二、cn.xinxing.model 这个包定义实体类。只有一个Students类,类中定义了几个属性,以及实现了get()和set()方法。此处就不展开了!

三、 cn.xinxing.service.student  定义一个服务层,用于提供数据以及封装下层实现。

3.1  StudentService 这是接口,定义了获取学生数据相关的方法。

 

package cn.xinxing.service.student;

import java.util.List;

import cn.xinxing.model.Students;

/**
 * 获取学生数据接口
 */
public interface StudentService 
	public List<Students> getAllStudents();//获取所有的学生数据

 

3.2 cn.xinxing.service.student.impl 这个包实现了上文中定义的接口,只有一个实现类StudentServiceImpl ,看具体实现,

 

package cn.xinxing.service.student.impl;

import java.util.List;

import cn.xinxing.business.StudentBusiness;
import cn.xinxing.model.Students;
import cn.xinxing.service.student.StudentService;

/**
 * 接口实现
 */
public class StudentServiceImpl implements StudentService

	@Override
	public List<Students> getAllStudents() 
		// TODO Auto-generated method stub
		return StudentBusiness.getAllStudents(); //调用具体的获取学生数据方法
	


getAllStudents()方法只是调用了其他地方的获取数据的方法。这个地方就是这么简单!

 

至此,项目中的全部代码都已经展示完了!相信仔细阅读这两篇文章后,大家应该对java web 接口开发有了更深的了解!如果,还有其他疑问,欢迎指出!

最后补上,例子下载地址

PS:   这里还想再多说几句!java接口开发,这个在正式项目中,需要涉及很多方面的知识,例如,数据库使用框架来维护,整个服务部署至云服务上等等!想要掌握这些东西,需要花费很多的时间和精力!我自己是一直做Android应用,接口开发是自己的自学的。java 接口开发这几篇博文呢,都只是初级的入门级的,在正式项目中呢,肯定不能这样做。目前的还有需要学习很多东西,希望和大家一块学习!

 

 

 

 

 

 

以上是关于JAVA温度补0问题?的主要内容,如果未能解决你的问题,请参考以下文章

单片机温度转换问题

Java每日一题——>739. 每日温度(蛮力法,栈方法)

Java每日一题——>739. 每日温度(蛮力法,栈方法)

Java每日一题——>739. 每日温度(蛮力法,栈方法)

温度转换-java

java 华氏温度转换为摄氏温度