利用JAVA实现.NET的String.format(),方便字符串合并

其实有的时候真的是很佩服NET而鄙视JAVA,微软的东西都特别的人性化(当然不是说他封装的控件多么多么好啊,我一向讨厌别人封装),拿一个最简单的例子,字符串合并,在NET中可以这么实现:

String str=String.format("my name is {0}",renyanwei);

 这样就可以把字符串给合并了,但是在JAVA中,虽然你可以利用printf语句实现

System.out.printf("my name is %s","renyanwei");

 但是,我们大多数情况不止是为了输出用的啊,有的时候只是为了得到一个字符串来进行高级处理,像生成SQL乱七八糟的,JAVA实现起来就很不爽了,所以这里我写了个小方法,来实现C#中这个功能,来看具体代码

class TestFormat
{
	public static void main(String[] args) 
	{
		String str1=StringFormat.format("my name is {0}, my age is {1}","renyanwei",20);
		String str2=StringFormat.format("I love {0}, you hate {0}","java");
		System.out.println(str1);
		System.out.println(str2);

               //              输出
               //my name is renyanwei, my age is 20
               //I love java, you hate java
	}
}

class StringFormat
{
	//字符串合并方法,返回一个合并后的字符串
	public static String format(String str,Object ... args)
	{

		//这里用于验证数据有效性
		if(str==null||"".equals(str))
			return "";
		if(args.length==0)
		{
			return str;
		}

		/*
		 *如果用于生成SQL语句,这里用于在字符串前后加单引号
		for(int i=0;i<args.length;i++)
		{
			String type="java.lang.String";
			if(type.equals(args[i].getClass().getName()))
				args[i]="'"+args[i]+"'";
		}
		*/

		String result=str;

		//这里的作用是只匹配{}里面是数字的子字符串
		java.util.regex.Pattern p = java.util.regex.Pattern.compile("\\{(\\d+)\\}");
		java.util.regex.Matcher m = p.matcher(str);

		while(m.find())
		{
			//获取{}里面的数字作为匹配组的下标取值
			int index=Integer.parseInt(m.group(1));

			//这里得考虑数组越界问题,{1000}也能取到值么??
			if(index<args.length)
			{

				//替换,以{}数字为下标,在参数数组中取值
				result=result.replace(m.group(),args[index].toString());
			}
		}
		return result;
	}
}

 这里正好复习了一下正则表达式和JAVASE5.0的新特性可变长参数Varargs ,具体用法是在参数类型和参数名之间使用"..."(三个英文的点)表示该参数是可以变长的,这个新特性真的是太TM好用了,说白了就是实现了动态数组!调用的时候你随便多少参数都成(注意类型必须相同),传到方法后自动给你生成个数组,然后你遍历数组就可以得到值了:

public static String format(String str,Object ... args)

 看看程序是怎么调用的,多练习下就可以熟练使用这个新特性了,如果大牛还有更好的方法欢迎来共享下

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值