字符串的格式化

博主原来是搞C的,C里面有sprintf来格式化字符串,后来转到java变傻了,拼接String只会用n个“+”,要么就是用StringBuilder的append方法,但要是遇上把数字格式化的情况(比如左补0等等),就只能傻乎乎的if else判断该补几个0。
后来终于有一天,博主发现原来java也有格式化的函数(jdk1.5就提供了),就是String.format(String format, Object... args),用法跟C差不多,只是转换符有些区别。这下可算是从苦逼的if else中解脱出来了,下面就记录几个常用的格式转换符:
%s   : 字符串,如"hello"
%c   : 字符,如'a'
%b   : 布尔类型,如true或者false
%d   : 十进制整型数,如119
%x   : 十六进制整型数,如f0
%f   : 十进制浮点数,java在这里不像c有%f/%lf/%ld等区分浮点与双精度,java的float类型和double类型都用%f
%0nd : n是十进制整数,表示这里占着n位数字,位数如不足n则左补0

字符串转数字类型

前面格式化说的是各种类型的数据格式化成字符串,那有时又需要把字符串转成数字类型,其实也很简单,字符串转整型用Integer.parseInt(String s),字符串转浮点数用Double.parseDouble(String s)。
现在还有个比较常用的情况,就是转换浮点数时需要保留小数点后面一位或者后面两位。如果仅仅是取整,有现成的数学函数如四舍五入Math.round、向上取整Math.ceil、向下取整Math.floor,就是没有现成的保留多少位的函数,这时自己要做下处理了,处理的办法有如下五种:
1、使用String.format;
2、使用Formatter;
3、使用BigDecimal;
4、使用DecimalFormat;
5、使用NumberFormat;

具体的示例代码如下:

 public static String formatWithString(double value, int digit) {String format = String.format("%%.%df", digit);return String.format(format, value).toString();}public static String formatWithFormatter(double value, int digit) {String format = String.format("%%.%df", digit);return new Formatter().format(format, value).toString();}public static String formatWithBigDecimal(double value, int digit) {BigDecimal bd = new BigDecimal(value);bd = bd.setScale(digit, RoundingMode.HALF_UP);return bd.toString();}public static String formatWithDecimalFormat(double src, int digit) {String pre_format = String.format(".%%0%dd", digit);String format = String.format(pre_format, 0);DecimalFormat df = new java.text.DecimalFormat(format); //".00"df.setRoundingMode(RoundingMode.HALF_UP);String value = df.format(src);return value;}public static String formatWithNumberFormat(double value, int digit) {NumberFormat nf = NumberFormat.getNumberInstance();nf.setMaximumFractionDigits(digit);nf.setMinimumFractionDigits(digit);nf.setRoundingMode(RoundingMode.HALF_UP);// 如果想输出的格式用逗号隔开,可以设置成truenf.setGroupingUsed(false);return nf.format(value);}

字符串的合法验证

app经常要检查用户输入信息是否正确,例如手机号是否合法、电子邮箱是否合法、身份证号是否合法等等。这种合法性验证就得用到正则表达式,对应到具体的处理类,便是Pattern和Matcher。Pattern是预定义校验规则,而Matcher则是进行校验判断;另外,从java1.4开始,对于简单的格式校验,也可直接调用String类的matches方法。常用的字符串校验场景与相应的示例代码如下:

 public static boolean isPhoneByPattern(String phone) {String regex = "^1[3|4|5|8]\\d{9}$";Pattern pattern = Pattern.compile(regex);Matcher matcher = pattern.matcher(phone);return matcher.matches();}public static boolean isPhoneByString(String phone) {// "[1]"代表第1位为数字1,"[358]"代表第二位可以为3、5、8中的一个,"\\d{9}"代表后面是可以是0~9的数字,有9位。String regex = "[1][358]\\d{9}";return phone.matches(regex);}public static boolean isEmailByPattern(String email) {String regex = "^([a-zA-Z0-9_\\-\\.]+)@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.)|(([a-zA-Z0-9\\-]+\\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\\]?)$";Pattern pattern = Pattern.compile(regex);Matcher matcher = pattern.matcher(email);return matcher.matches();}public static boolean isEmailByString(String email) {String regex = "([a-zA-Z0-9_\\-\\.]+)@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.)|(([a-zA-Z0-9\\-]+\\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\\]?)";return email.matches(regex);}public static boolean isICNOByPattern(String icno) {String regex15 = "^[1-9]\\d{7}((0\\d)|(1[0-2]))(([0|1|2]\\d)|3[0-1])\\d{3}$";Pattern pattern15 = Pattern.compile(regex15);Matcher matcher15 = pattern15.matcher(icno);String regex18 = "^[1-9]\\d{5}[1-9]\\d{3}((0\\d)|(1[0-2]))(([0|1|2]\\d)|3[0-1])\\d{3}([0-9]|x|X)$";Pattern pattern18 = Pattern.compile(regex18);Matcher matcher18 = pattern18.matcher(icno);return (matcher15.matches() || matcher18.matches());}public static boolean isICNOByString(String icno) {String regex15 = "[1-9]\\d{7}((0\\d)|(1[0-2]))(([0|1|2]\\d)|3[0-1])\\d{3}";String regex18 = "[1-9]\\d{5}[1-9]\\d{3}((0\\d)|(1[0-2]))(([0|1|2]\\d)|3[0-1])\\d{3}([0-9]|x|X)";return (icno.matches(regex15) || icno.matches(regex18));}

一个简单的计算器

提供加减乘除四则运算的计算器,功能其实挺简单,界面布局也简单,通过java的+-*/来操作double类型就可以了,这里给出的是基于BigDecimal的实现(纯算法,如需页面展示可以自己画一个)。

点击这里下载计算器需要的运算源码

Android开发笔记(四)字符串格式化相关推荐

  1. Android开发笔记(一百五十一)WebView与JavaScript交互的四种形式

    WebView如果作为简单的网页浏览器,对于一般的浏览行为来说,已经足够了.可做为企业开发者,你的App通常要嵌入自家公司的网页,如此一来,还得考虑App与Web之间的消息传递,这就涉及到App的原生 ...

  2. Android开发笔记(四十六)手机相关事件

    手机定位 有一类事件必须依赖于手机信号方能触发,如果把设备中的sim卡拔出,或者该设备本身不支持sim卡(如ipad),那么这类事件将永远不会被触发.在Android中,这类事件包括定位事件和手机信号 ...

  3. Android开发笔记(一百五十四)OpenGL的画笔工具GL10

    上一篇文章介绍了OpenGL绘制三维图形的流程,其实没有传说中的那么玄乎,只要放平常心把它当作一个普通控件就好了,接下来继续介绍OpenGL具体的绘图操作,这项工作得靠三维图形的画笔GL10来完成了. ...

  4. Android开发笔记(九十四)图片的基本加工

    位图管理Bitmap Android上的图形使用Drawable类,而位图管理则使用Bitmap类,java上与之对应的是awt包中的BufferedImage.Android开发中有需要对jpg.p ...

  5. Android开发笔记(六十四)网页加载与JS调用

    内置浏览器 网页视图WebView 如果一个网站已经有现成的网页及业务逻辑,那么使用WebView将其内嵌到app中,省去了app重画页面与http通信的事情,无疑是更经济的做法.WebView就是A ...

  6. Android开发笔记(五十四)数据共享接口ContentProvider

    ContentProvider 前面几节介绍了进程间通信的几种方式,包括消息包级别的Messenger.接口调用级别的AIDL.启动页面/服务级别的Notification,还有就是本节这个数据库级别 ...

  7. Android开发笔记(四十九)异步任务处理AsyncTask

    AsyncTask异步任务 Thread+Handler方式虽然能够实现多线程的通信处理,但是写起代码来颇为繁琐,所以Android提供了AsyncTask这样一个轻量级的异步任务类,其内部封装好Th ...

  8. Android开发笔记(四十八)Thread类实现多线程

    Thread概述 Thread类是真正的线程,查看源码可见Thread也实现了Runnable接口,但它内部有创建新的工作线程,所以Thread对象运行在与主线程不一样的分线程上. 因为Thread对 ...

  9. Android开发笔记(四十七)Runnable接口实现多线程

    Runnable概述 Runnable接口可声明一连串的事务,常用于多线程处理.但是实现Runnable接口并不意味着开启了一个新线程,只是定义了接下来要做的事情,至于说这些事情要在主线程处理,还是在 ...

  10. Android开发笔记(四十五)手势事件

    手势事件的流程 基本手势事件 基本的手势事件主要有如下三个方法: dispatchTouchEvent : 判断该事件是否需要下发.返回true表示需要下发给下级视图,返回false表示不需要下发(交 ...

最新文章

  1. Smarty的配置与高级缓存技术
  2. 实现UILabel渐变色效果
  3. 【dfs】【hash】有趣的英语角(2015特长生 T2/luogu 1019)
  4. linux多线程九宫格,项目实战:Qt九宫格图片资源浏览器(支持window、linux、兼容各国产系统,支持子文件夹,多选,全选,图片预览,行数与列数设置等)...
  5. JavaScript正则式练习
  6. 热水器是长期开着好还是要等到用的时候才开?
  7. Xavier Initialization 的理解与推导(及实现)
  8. mysql 主备监控_mysql 主从备份监控slave状态nagios脚本
  9. JS中遍历普通数组和字典数组的区别
  10. 计算机联锁图册计算公式,计算机联锁图册认识文档
  11. 分布式渲染运行时3D引擎架构在Web端的应用: 秒开3D Web APP
  12. 按颜色分类:蓝紫色系(Purple Blue)
  13. python手机价格预测论文_基于Python的微博发表意向预测研究
  14. unity 报错 Some objects were not cleaned up when closing the scene. 原因与方案
  15. android手机rom物理存储器,手机ROM/RAM的区别
  16. Codeforces Round #247 (Div. 2) - k-Tree
  17. 【转】类别catagory的用法
  18. 如何自定义文档工程师绩效考核标准? | 职场杂谈
  19. STC15F2K60S2实现A/D转换
  20. Office 365导出PDF带备注页

热门文章

  1. 语义分割算法性能比较_AAAI 2020 | 商汤:新视频语义分割和光流联合学习算法
  2. java题1_java面试题1
  3. java保留小数_java保留两位小数4种方法
  4. 【第8篇】Python爬虫实战-批量删除csdn私信记录
  5. 您使用的是不受支持的命令行标记: --unsafely-treat-insecure-origin-as-se
  6. JWT介绍以及java-jwt的使用
  7. [Ext JS4] 数据包
  8. Windows 帐号管理相关操作
  9. Kaggle初体验之泰坦尼特生存预测
  10. 计算机学院运动会开幕式稿,运动会开幕式新闻稿 运动会开幕式广播稿原创2019...