Android字符串格式化


转自 http://blog.csdn.net/aqi00/article/details/49997843

字符串的格式化

博主原来是搞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);  
    // 如果想输出的格式用逗号隔开,可以设置成true  
    nf.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));  
    }  




### 回答1: 在 Android 应用中,你可以使用 `SimpleDateFormat` 类来格式化时间字符串。 例如,假设你想将时间字符串 "2022-12-29T16:30:00" 格式化成 "2022年12月29日 下午4:30" 的格式,你可以这样做: ```java String timeString = "2022-12-29T16:30:00"; SimpleDateFormat inputFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss"); SimpleDateFormat outputFormat = new SimpleDateFormat("yyyy年MM月dd日 a h:mm"); try { Date date = inputFormat.parse(timeString); String outputString = outputFormat.format(date); System.out.println(outputString); // 输出:2022年12月29日 下午4:30 } catch (ParseException e) { e.printStackTrace(); } ``` 在这里,我们首先使用 `inputFormat` 将时间字符串解析为 `Date` 类型,然后使用 `outputFormat` 将时间格式化为所需的格式。 注意,格式化字符串中的一些关键字符,如 "yyyy"、"MM"、"dd" 等,表示时间中的年份、月份、日期等信息。你可以在此链接中找到更多关于这些字符的信息:https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/text/SimpleDateFormat.html 希望这能帮到你! ### 回答2: 在Android中,我们可以使用SimpleDateFormat类来指定字符串的时间格式化。 首先,我们需要创建一个SimpleDateFormat对象,并指定时间的格式。例如,如果我们想将时间格式化为"yyyy-MM-dd HH:mm:ss"的形式,我们可以使用以下代码: SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 然后,我们可以使用SimpleDateFormat的format()方法来将时间格式化为指定的字符串格式。例如,如果我们有一个Date对象,我们可以使用以下代码将其格式化字符串: Date date = new Date(); String formattedDate = sdf.format(date); 如果我们有一个表示时间的字符串,我们也可以将其转换为指定格式的Date对象。使用SimpleDateFormat的parse()方法实现。例如,如果我们有一个字符串"2021-01-01 12:00:00",我们可以使用以下代码将其转换为Date对象: String dateString = "2021-01-01 12:00:00"; Date date = sdf.parse(dateString); 需要注意的是,在进行格式化或解析时,我们必须确保提供的字符串与指定的时间格式匹配,否则会抛出ParseException异常。因此,我们应该使用try-catch语句来处理可能的异常。 综上所述,我们可以使用SimpleDateFormat类来在Android中指定字符串的时间格式化。 ### 回答3: 在Android中,可以使用SimpleDateFormat类来指定字符串的时间格式化。 首先,我们需要创建一个SimpleDateFormat对象,指定我们想要的时间格式。例如,如果我们想要将一个时间戳格式化为"yyyy-MM-dd HH:mm:ss"的字符串,我们可以这样创建一个SimpleDateFormat对象: ``` SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); ``` 然后,我们可以使用SimpleDateFormat对象的format方法将时间戳格式化字符串。例如,如果我们有一个时间戳为1589365200000(表示2020年5月14日13时00分00秒),我们可以这样格式化字符串: ``` String formattedTime = sdf.format(new Date(1589365200000)); ``` 最后,变量formattedTime将包含格式化后的时间字符串"2020-05-14 13:00:00"。 如果我们想要将一个字符串转换为时间对象,我们可以使用SimpleDateFormat类的parse方法。例如,如果我们有一个时间字符串"2020-05-14 13:00:00",我们可以这样将其转换为时间对象: ``` Date time = sdf.parse("2020-05-14 13:00:00"); ``` 现在,变量time将包含转换后的时间对象。 总结起来,使用Android的SimpleDateFormat类,我们可以方便地指定字符串的时间格式化和将字符串转换为时间对象。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值