参看: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;
}
}