浏览 6160 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2008-10-26
其实有的时候真的是很佩服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) 看看程序是怎么调用的,多练习下就可以熟练使用这个新特性了,如果大牛还有更好的方法欢迎来共享下
声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2008-10-26
java.text.MessageFormat.format(String pattern, Object ... arguments)
|
|
返回顶楼 | |
发表时间:2008-10-26
java.text 有大量的对象合并的东西, 自己不好好学, 怪JAVA。。。。。晕
|
|
返回顶楼 | |
发表时间:2008-10-26
sdh5724 写道 java.text 有大量的对象合并的东西, 自己不好好学, 怪JAVA。。。。。晕 老大 麻烦你看下标题,我这里只是借这个例子来说明可变长参数Varargs 和正则表达式的使用而已,是的 JAVA.text是有很多东西 麻烦 我是个新手 我还没学到 我正在学 理解片面了你可以帮忙指正,你可以说我知道的少,不要说我没好好学 OK? 大牛,JAVA是可以实现,但有NET方便么,我说错了么,一个简单的东西都要导几个包 有必要么? |
|
返回顶楼 | |
发表时间:2008-10-26
java里同样有String.format方法
|
|
返回顶楼 | |
发表时间:2008-10-26
姜太公 写道 java里同样有String.format方法
引用 format public static String format(String format, Object... args) 使用指定的格式字符串和参数返回一个格式化字符串。 始终使用的语言环境是由 Locale.getDefault() 返回的语言环境。 参数: format - 格式字符串 args - 在格式字符串中由格式说明符引用的参数。如果还有格式说明符以外的参数,则忽略这些额外的参数。参数是可变的并且可以为 0。参数的最大数目受《Java Virtual Machine Specification》所定义的 Java 数组的最大维度的限制。针对 null 参数的行为依赖于 转换。 返回: 一个格式化字符串 抛出: IllegalFormatException - 如果格式字符串中包含非法语法,与给定的参数不兼容的格式说明符,格式字符串给定的参数不够,或存在其他非法条件。有关所有可能的格式化错误的规范,请参阅 formatter 类规范的 Details 一节。 NullPointerException - 如果 format 为 null 从以下版本开始: 1.5 另请参见: Formatter 功能及其强大! |
|
返回顶楼 | |
发表时间:2008-10-26
java里同样有String.format方法
引用 format public static String format(String format, Object... args) 使用指定的格式字符串和参数返回一个格式化字符串。 始终使用的语言环境是由 Locale.getDefault() 返回的语言环境。 参数: format - 格式字符串 args - 在格式字符串中由格式说明符引用的参数。如果还有格式说明符以外的参数,则忽略这些额外的参数。参数是可变的并且可以为 0。参数的最大数目受《Java Virtual Machine Specification》所定义的 Java 数组的最大维度的限制。针对 null 参数的行为依赖于 转换。 返回: 一个格式化字符串 抛出: IllegalFormatException - 如果格式字符串中包含非法语法,与给定的参数不兼容的格式说明符,格式字符串给定的参数不够,或存在其他非法条件。有关所有可能的格式化错误的规范,请参阅 formatter 类规范的 Details 一节。 NullPointerException - 如果 format 为 null 从以下版本开始: 1.5 另请参见: Formatter 功能及其强大! |
|
返回顶楼 | |
发表时间:2008-10-26
恩 受教了 某些人还给一些乱七八糟的text包里什么东西, 你直接给我说String里有这个东西不就成了么
|
|
返回顶楼 | |