java里面有没有类似sprintf(s,"this is a %s","aaa")的函数?(100分)

  • 主题发起人 主题发起人 曹晓钢
  • 开始时间 开始时间
曹大虾: Java 2中暂时还没有sprintf.
计划在2001年发布的下一版 Java2SE, 代号"美林"(Merlin)
其中有计划扩充这个功能.
另外,建议看看"美林"计划59页的文档.
http://java.sun.com/aboutJava/communityprocess/review/jsr059/merlin.pdf

 
我觉得你可以用:
s="this is"+"aaa";
来表示你所想要的东西。
 
s="this is a "+aaa
 
这样不爽呀。
比如:
q.SQL = " Insert into NULLID.ORDERDETAIL "
+ " (CHRNO,CHRBACKNO,CHRCUSTOMER,CHRCUSTOMERPO,CHRIMPORTCOUNTRY,"
+ " CHRIMPORTOFFICE,CHRIMPORTORDER,CHREXPORTCOUNTRY,CHREXPORTOFFICE,"
+ " CHRSUPPLIER,INTQTY)"
+ " values ("
+ "'"+_chrno+"',"
+ "'"+BackNO+"',"
+ "'"+_Customer+"',"
+ "'"+_CustomerPONO+"',"
+ "'"+ImportCountry+"',"
+ "'"+ImportOffice+"',"
+ "'"+OrderNO+"',"
+ "'"+_ExportCountry+"',"
+ "'"+_ExportOfficeID+"',"
+ "'"+_Supplier+"',"
+ Qty+")";
q.safeExecSql();
q.close();
这是我现在的代码。
我不喜欢sqlStatement里面的传参数的方法,就是setParameter()。
要是可以有q.SQL = ("select * from xxx where CHRNO=%s,CHRBACKNO=%s",chrNO,chrBackNO)多好啊。
 
要改变sqlStatement里面的传参数的方法,
恐怕要等SUN的下一版JDBC API了。
 
自己写一个吧!不是很费劲。
public String sprintf(String s, String format, Vector data){
String ret = "";
int start = 0;
int index = 0;
boolean flag = true;
int dataIndex = 0;
index = format.indexOf("%", start);
if (index < 0)
flag = false;
while(true){
ret += format.substring(start, index);
start = index + 1;
ret += data.elementAt(dataIndex).toString();
dataIndex ++;
index = format.indexOf("%", start);
if (index < 0)
flag = false;
}
ret += format.substring(start);
ret = s + ret;
return ret;
}
没测试,没加错误处理,强壮一点当然好了。
其实这也是java的优秀之处,想要什么自己动手好了。
 
Oh,忘了在13行前后加一句:
ret += "'";
 
《Java 2 核心技术 卷I: 基础知识》的随书光盘中作者就提供了一个功能完备的 sprintf() 函数。
 
yoyoyo,thankx! welldo
ne.
ninghu,post上来好不好?
主要是我接触java时间还不长,不知道那些东西有,那些没有。
这种东西写起来总是要消耗时间,我原来自己写TokenString,后来才发现已经有这样的函数了...
所以,要是有了标准的,就省得自己写了。这也是提高生产力,减少无谓劳动。
而且Java的机制就象delphi一样,是可以import package的,要是有功能强大的package,不就爽多了吧?
那位发现了强大又好用的package,通知大家.
比如jarkata project里面,就有好几个用于正则处理的包。要是有兴趣又有闲的话,哪位
不妨写个研究报告?
 
to 曹晓钢:
呵呵,可以用 PreparedStatement 来代替 Statement, 而且不用考虑
引号问题,其他的我就不说了, 您的功力没问题。 我现在也在搞 jsp,java
方面的东西,有时间可以联系联系。 SuperMMX@263.net
 
好像还是不爽...
要这么写
setParameter(1,"xxx");
setParameter(2,"xxx");
setParameter(3,"xxx");
不直观.
我刚才顺便看了看IBM 的Data Access Bean,做的还真不错,Statement分 SelectStatement
和SQLStatement;
然后有一个叫StatementMetaData的类,功能比java1.1里面的Metadata强
很多,支持SetParameter("CHRDATE",DateAAA.toString());
用PreparedStatement,效率是应该高点,不过写着好像还是不爽。
SuperMMX,您是不是这个意思啊?
 
差不多, 但是用着很舒服, 我都是这么写的,
id = 1;
setInt(id++, 1);
setString(id++, "kdfdjf");
setBinaryStream(id++, aInputStream);
不直观倒是真的, 要是能直接写字段名就好了。
sql 语句都是写好的,留下参数,
只要类设计的好, 还是挺好用的。
 
You can write a own class to implement this function.
and define the method with static method.
I think it not difficult.
 
to 曹晓钢:
看来与你有同感的人还不少,来看看这篇文章。“Formatted Printing for Java (sprintf)”
有个老外写了一个类,与C里的sprintf一样强大,正是你所要的。看看题目你就知道了
地址是:
http://developer.java.sun.com/developer/technicalArticles/Programming/sprintf/

 
perfect! eguy!
你是不是整天在sun上面转啊?
 
还有什么好东东,eguy开个讲座来扫盲吧!
 
偶尔罢了。也是偶然发现这篇文章,很高兴对你有用。
 
多人接受答案了。
 
扫盲?怎么敢众大侠面前造次。大家只要共同进步就可以了。
 

Similar threads

回复
0
查看
987
不得闲
S
回复
0
查看
1K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
911
SUNSTONE的Delphi笔记
S
D
回复
0
查看
880
DelphiTeacher的专栏
D
D
回复
0
查看
941
DelphiTeacher的专栏
D
后退
顶部