2、数据转换String相关

参看:http://www.cnblogs.com/andy2005/archive/2006/07/24/458564.html

           http://www.cnblogs.com/bmbm/archive/2011/12/06/2342264.html

1、各种数据转换为String

   将整数 int 转换成字串 String 
A. 有叁种方法:
1.) String s = String.valueOf(i);
2.) String s = Integer.toString(i);
3.) String s = "" + i;
注: Double, Float, Long 转成字串的方法大同小异.

 Date-->String

System.out.println(new SimpleDateFormat("yyyy-MM-dd").format(new Date()).toString());


反向转换:
通过类包装器
eg1:int i=Integer.parseInt(“123”)
说明:此方法只能适用于字符串转化成整型变量
eg2: float f=Float.valueOf(“123”).floatValue()
说明:上例是将一个字符串转化成一个Float对象,然后再调用这个对象的floatValue()方法返回其对应的float数值。
eg3: boolean b=Boolean.valueOf(“123”).booleanValue()
说明:上例是将一个字符串转化成一个Boolean对象,然后再调用这个对象的booleanValue()方法返回其对应的boolean数值。
eg4:double d=Double.valueOf(“123”).doubleValue()
说明:上例是将一个字符串转化成一个Double对象,然后再调用这个对象的doubleValue()方法返回其对应的double数值。
eg5: long l=Long.valueOf(“123”).longValue()
说明:上例是将一个字符串转化成一个Long对象,然后再调用这个对象的longValue()方法返回其对应的long数值。
eg6: char=Character.valueOf(“123”).charValue()
说明:上例是将一个字符串转化成一个Character对象,然后再调用这个对象的charValue()方法返回其对应的char数值。

String-->Date

String s="2015-12-12";
SimpleDateFormat sf= new SimpleDateFormat("yyyy-MM-dd");
Date d = sf.parse(s);
System.out.println(d);



判断字符串中是否包含某一个子串

s2.indexOf(s1)>=0        以s1第一次出现位置判断

s2.contains(s1)          包含,返回boolean

判断字符串是否为空

s2.length==0;

s2.isEmpty();

其他常用

startsWith/endsWith/equals/equalsIgnorecase/toUpperCsae/toLowerCsae/trim/replace(oldchar,newchar)/split/subString(begin,end)/

compareTo(顺序比较,相等值为0),equals()方法比较字符串对象中的字符,==比较两个对象是否引用的同一实例。


字符数组--->String

char[]   data={'a','b','c'};   
String  s=new   String(data);

字符串数组--->String

String[] str = {"abc", "bcd", "def"};
StringBuffer sb = new StringBuffer();
for(int i = 0; i < str.length; i++){
 sb. append(str[i]);
}
String s = sb.toString();

将字符串转成字符组

String s= "skx";
char[] data=s.toCharArray();


String.format()方法

参看:http://www.cnblogs.com/linjiqin/archive/2013/06/21/3147943.html

1、转换符
%s: 字符串类型,如:"ljq"
%b: 布尔类型,如:true
%d: 整数类型(十进制),如:99
%f: 浮点类型,如:99.99
%%: 百分比类型,如:%
%n: 换行符
 */
@Test
public void test1(){
 String str=null;
    str=String.format("Hi, %s", "林计钦"); // 格式化字符串
    System.out.println(str); // 输出字符串变量str的内容
    System.out.printf("3>7的结果是:%b %n", 3>7);
    System.out.printf("100的一半是:%d %n", 100/2);
    System.out.printf("50元的书打8.5折扣是:%f 元%n", 50*0.85);
    System.out.printf("上面的折扣是%d%% %n", 85);
}
/*
2、常见日期时间格式化
c: 包括全部日期和时间信息 星期六 十月 27 14:21:20 CST 2007
F: "年-月-日"格式,如:2007-10-27
D: "月/日/年"格式,如:10/27/07
r: "HH:MM:SS PM"格式(12时制),如:02:25:51 下午
T: "HH:MM:SS"格式(24时制),如:14:28:16
R: "HH:MM"格式(24时制),如:14:28
 */
@Test
public void test2(){
    Date date=new Date(); // 创建日期对象
    System.out.printf("全部日期和时间信息:%tc%n", date);//格式化输出日期或时间
    System.out.printf("年-月-日格式:%tF%n", date);
    System.out.printf("月/日/年格式:%tD%n", date);
    System.out.printf("HH:MM:SS PM格式(12时制):%tr%n", date);
    System.out.printf("HH:MM:SS格式(24时制):%tT%n", date);
    System.out.printf("HH:MM格式(24时制):%tR%n", date);
}
/*
3、格式化日期字符串
b或者h: 月份简称,如
中:十月
英:Oct
 
B: 月份全称,如
中:十月
英:October
  
a: 星期的简称,如
中:星期六
英:Sat
  
A: 星期的全称,如:
中:星期六
英:Saturday
 
C: 年的前两位数字(不足两位前面补0),如:20
y: 年的后两位数字(不足两位前面补0),如:07
Y: 4位数字的年份(不足4位前面补0),如:2007
j: 一年中的天数(即年的第几天),如:300 
m: 两位数字的月份(不足两位前面补0),如:10
d: 两位数字的日(不足两位前面补0),如:27
e: 月份的日(前面不补0),如:5
 */
@Test
public void test3(){
       Date   date=new  Date();                                                                       // 创建日期对象
    String str=String.format(Locale.US,"英文月份简称:%tb",date);      // 格式化日期字符串
    System.out.println(str);                                                                              // 输出字符串内容
    System.out.printf("本地月份简称:%tb%n",date);
    str=String.format(Locale.US,"英文月份全称:%tB",date);
    System.out.println(str);
    System.out.printf("本地月份全称:%tB%n",date);
    str=String.format(Locale.US,"英文星期的简称:%ta",date);
    System.out.println(str);
    System.out.printf("本地星期的简称:%tA%n",date);
    System.out.printf("年的前两位数字(不足两位前面补0):%tC%n",date);
    System.out.printf("年的后两位数字(不足两位前面补0):%ty%n",date);
    System.out.printf("一年中的天数(即年的第几天):%tj%n",date);
    System.out.printf("两位数字的月份(不足两位前面补0):%tm%n",date);
    System.out.printf("两位数字的日(不足两位前面补0):%td%n",date);
    System.out.printf("月份的日(前面不补0):%te",date);
}
/*
4、格式化时间字符串
H: 2位数字24时制的小时(不足2位前面补0),如:15
I: 2位数字12时制的小时(不足2位前面补0),如:03
k: 2位数字24时制的小时(前面不补0),如:15
l: 2位数字12时制的小时(前面不补0),如:3
M: 2位数字的分钟(不足2位前面补0),如:03
S: 2位数字的秒(不足2位前面补0),如:09
L: 3位数字的毫秒(不足3位前面补0),如:015
N: 9位数字的毫秒数(不足9位前面补0),如:562000000
 
p: 小写字母的上午或下午标记,如:
中:下午
英:pm
  
z: 相对于GMT的RFC822时区的偏移量,如:+0800
Z: 时区缩写字符串,如:CST
s: 1970-1-1 00:00:00 到现在所经过的秒数,如:1193468128
Q: 1970-1-1 00:00:00 到现在所经过的毫秒数,如:1193468128984
 
 */
@Test
public void test4(){
    Date date=new Date();                               // 创建日期对象
    System.out.printf("2位数字24时制的小时(不足2位前面补0):%tH%n",date);
    System.out.printf("2位数字12时制的小时(不足2位前面补0):%tI%n",date);
    System.out.printf("2位数字24时制的小时(前面不补0):%tk%n",date);
    System.out.printf("2位数字12时制的小时(前面不补0):%tl%n",date);
    System.out.printf("2位数字的分钟(不足2位前面补0):%tM%n",date);
    System.out.printf("2位数字的秒(不足2位前面补0):%tS%n",date);
    System.out.printf("3位数字的毫秒(不足3位前面补0):%tL%n",date);
    System.out.printf("9位数字的毫秒数(不足9位前面补0):%tN%n",date);
    String str=String.format(Locale.US,"小写字母的上午或下午标记(英):%tp",date);
    System.out.println(str);                          // 输出字符串变量str的内容
    System.out.printf ("小写字母的上午或下午标记(中):%tp%n",date);
    System.out.printf("相对于GMT的RFC822时区的偏移量:%tz%n",date);
    System.out.printf("时区缩写字符串:%tZ%n",date);
    System.out.printf("1970-1-1 00:00:00 到现在所经过的秒数:%ts%n",date);
    System.out.printf("1970-1-1 00:00:00 到现在所经过的毫秒数:%tQ%n",date);
}
}

   String,StringBuffer与StringBuilder的区别

String 字符串常量
StringBuffer 字符串变量(线程安全)
StringBuilder 字符串变量(非线程安全)

在每次对 String 类型进行改变的时候其实都等同于生成了一个新的 String 对象,然后将指针指向新的 String 对象,所以经常改变内容的字符串最好不要用 String ,因为每次生成对象都会对系统性能产生影响,特别当内存中无引用对象多了以后, JVM 的 GC 就会开始工作,那速度是一定会相当慢的。

Java.lang.StringBuffer线程安全的可变字符序列。StringBuffer 上的主要操作是 append 和 insert 方法,可重载这些方法,以接受任意类型的数据。每个方法都能有效地将给定的数据转换成字符串,然后将该字符串的字符追加或插入到字符串缓冲区中。append 方法始终将这些字符添加到缓冲区的末端;而 insert 方法则在指定的点添加字符。

例如,如果 z 引用一个当前内容是“start”的字符串缓冲区对象,则此方法调用 z.append("le") 会使字符串缓冲区包含“startle”,而 z.insert(4, "le") 将更改字符串缓冲区,使之包含“starlet”。

java.lang.StringBuilder一个可变的字符序列是5.0新增的。此类提供一个与 StringBuffer 兼容的 API,但不保证同步。该类被设计用作 StringBuffer 的一个简易替换,用在字符串缓冲区被单个线程使用的时候(这种情况很普遍)。如果可能,建议优先采用该类,因为在大多数实现中,它比 StringBuffer 要快。两者的方法基本相同。


StringHelper


import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.UUID;

import org.loushang.bsp.security.context.GetBspInfo;

import com.sz.common.util.DateUtil;
import com.sz.common.util.StringUtil;

import sun.misc.BASE64Decoder;
import sun.misc.BASE64Encoder;

/**
 * String帮助
 * @author Meteor
 *
 */
public class StringHelper {
	
	/**
	 * 日期格式的加减
	 * @throws ParseException
	 * @param format 需要转的格式
	 * @param type(年、月、日)
	 * @param len(增加和减少的值)
	 * @param str
	 * @return str
	 * @throws ParseException
	 */
	public static String dateAdd(String type,int len,String str,String format) throws Exception {
			SimpleDateFormat sdf=new SimpleDateFormat(format);
			if(StringUtil.isEmpty(str)){
				str=DateUtil.getCurrentDate();
			}
			Date dt= sdf.parse(str);
			Calendar rightNow = Calendar.getInstance();
	        rightNow.setTime(dt);
	        if(type.indexOf("年")>-1){
	        	rightNow.add(Calendar.YEAR,len);//日期加减
	        }else if(type.indexOf("月")>-1){
	        	rightNow.add(Calendar.MONTH,len);//日期加减
	        }else if(type.indexOf("日")>-1){
	        	rightNow.add(Calendar.DAY_OF_YEAR,len);//日期加减
	        }
	        Date dt1=rightNow.getTime();
	        String reStr = sdf.format(dt1);
	        return reStr;
	}
	
	public static int toInt(String str){
		if(isEmpty(str)){
			return 0;
		}else{
			try{
				return Integer.valueOf(str).intValue();
			}catch(NumberFormatException e){
				return 0;
			}
		}
	}
	
	public static int toInt(String str,int num){
		if(isEmpty(str)){
			return num;
		}else{
			try{
				return Integer.valueOf(str).intValue();
			}catch(NumberFormatException e){
				return num;
			}
		}
	}
	
	public static boolean isEmpty(String str){
		 if(null==str||"null".equals(str)||"".equals(str)||0==str.length()){
			return true;
		}else return false;
	}
	
	public static boolean isNotEmpty(String str){
		 return !isEmpty(str);
	}
	
	/**
	 * 将对象转换为字符串
	 * @param obj
	 * @return String
	 */
	public static String ToString(Object obj)
	{
		if(obj==null)return "";
		return obj.toString();
	}
	
	
	/**
	 * 将对象转换为字符串
	 * @param obj
	 * @return String
	 */
	public static String ToString(Object obj,String isNullToShow)
	{
		if(obj==null) return isNullToShow;
		return obj.toString();
	}
	
	/** 
     * 获取字符串的长度,中文占一个字符,英文数字占半个字符 
     * 
     * @param value  指定的字符串           
     * @return 字符串的长度 
     */  
    public static double length(String value) {  
        double valueLength = 0;  
        String chinese = "[\u4e00-\u9fa5]";  
        // 获取字段值的长度,如果含中文字符,则每个中文字符长度为2,否则为1   
        for (int i = 0; i < value.length(); i++) {  
            // 获取一个字符   
            String temp = value.substring(i, i + 1);  
            // 判断是否为中文字符   
            if (temp.matches(chinese)) {  
                // 中文字符长度为1   
                valueLength += 1;  
            } else {  
                // 其他字符长度为0.5   
                valueLength += 0.5;  
            }  
        }  
        //进位取整   
        return  Math.ceil(valueLength);  
    }
    // 将 s 进行 BASE64 编码 
   public static String getBASE64(String s) { 
	  if (s == null) return null; 
	  return (new BASE64Encoder().encode(s.getBytes()));
   }
   
    //base64解密
	public static String getFromBASE64(String s) { 
		if (s == null) return null; 
		BASE64Decoder decoder = new BASE64Decoder(); 
		try { 
			byte[] b = decoder.decodeBuffer(s); 
			return new String(b); 
		} catch (Exception e) { 
			return null; 
		} 
	}
	
    //UUID码
	public static String getUUID32() { 
		return UUID.randomUUID().toString().replace("-", "");
	}
	
	/**
	 * 将对象转换为字符串 且去掉含有":"和",";
	 * @param obj
	 * @return String
	 */
	public static String ToStringFormat(String obj)
	{
		if(obj==null)return "";
		return obj.toString().replace(":","").replace(",","");
	}
	
	
	/**
	* 从身份证获取出生日期
	* @param cardNumber 已经校验合法的身份证号
	* @return Strig YYYY-MM-DD 出生日期
	*/
	public static String getBirthDateFromIdCard(String cardNumber){
		if(StringUtil.isEmpty(cardNumber)){
			return "1900-01-01";
		}
		
		String card = cardNumber.trim();
	    String year;
	    String month;
	    String day;
	    if (card.length()==18){ //处理18位身份证
	        year=card.substring(6,10);
	        month=card.substring(10,12);
	        day=card.substring(12,14);
	    }else{ //处理非18位身份证
	    	year=card.substring(6,8);
	        month=card.substring(8,10);
	        day=card.substring(10,12);
	        year="19"+year;        
	    }
	    if (month.length()==1){
	        month="0"+month; //补足两位
	    }
	    if (day.length()==1){
	        day="0"+day; //补足两位
	    }
	    return year+"-"+month+"-"+day;
	}
	/**
	 * 审批意见自动添加审批人和审批时间信息
	 * @param str
	 * @return
	 */
	public static String resetYj(String str){
		if(!StringUtil.isEmpty(str)){
			str += "(" + GetBspInfo.getBspInfo().getUserName() + "-" + DateUtil.getCurrentDateTime() + ")";
		}
		return str;
	}
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值